初学Java 和数据库方面的知识,下面是我所理解的,请指正、补充,谢谢!!!1、Java 程序和数据库连接可以通过:(1)JDBC/ODBC桥 (2)厂商提供的JDBC驱动器
如果通过JDBC/ODBC桥连接,就需要配置数据源;如果用厂商提供的JDBC驱动器,直接引入驱动器包即可,是这样的吗?2、和Access数据库连接,只能通过JDBC/ODBC桥连接,因为Access 没有服务器;而其他数据库(SQL Server、MySql等)则可以通过JDBC驱动器连接(他们有服务器),是这样么?如果不对,为什么?我会把我知道的不断更新!

解决方案 »

  1.   

    1、是的
    2、Access数据库连接,只能通过JDBC/ODBC桥连接,不是因为没有服务器,而是因为没有人为ACCESS写JDBC驱动
      

  2.   


    我下载了一个Access 的驱动程序,如何能用上呢???
      

  3.   

    我最开始的时候,就是用想用JDBC连接Access数据库:
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection conn = DriverManager.getConnection("jdbc:odbc:Driver={MicroSoft Access Driver *.mdb)};DBQ = D:\\CnsJava\\ThinkingInJava\\src\\Contact.mdb", "", "");Contact.mdb是我自己建立的一个Access数据库。conn 的时候就出错了,怎么修改呢?是不是Access驱动程序包放错地方了?该放哪里?
      

  4.   

    我发现了,连接Access 的时候,也可以用JDBC,而且不需要用驱动程序。
      

  5.   


    package database;import java.sql.*;
    import javax.sql.*;public class AccessDB {
    private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    private String url = "jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=D:\\CnsJava\\ThinkingInJava\\src\\Contact.mdb";//不用桥连接:Access不需要驱动程序的
    //private String url = "jdbc:odbc:AccessDataSourse";//桥连接:AccessDataSourse是数据源,需要手动建立
    private String user = "";
    private String pwd = "";
    private Connection conn;
    private Statement stmt;
    private ResultSet rs;

    //加载驱动程序
    public AccessDB() {
    try {
    Class.forName(driver);
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }
    //创建不可滚动的连接(默认链接)
    public void connect1() {
    try {
    conn = DriverManager.getConnection(url, user, pwd);
    stmt = conn.createStatement();
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }
    //创建可以滚动的连接
    public void connect2() {
    try {
    conn = DriverManager.getConnection(url, user, pwd);
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }
    //关闭连接
    public void close() {
    try {
    if (stmt != null)
    stmt.close();
    if (conn != null)
    conn.close();
    }
    catch(Exception e) {
    System.out.println(e);
    }
    }
    //查询语句
    public ResultSet executeQuery(String sql) {
    try {
    if (stmt == null) {
    connect1();
    }
    rs = stmt.executeQuery(sql);

    catch (Exception e) {
    System.out.println(e);
    }
    return rs;
    }

    //测试
    public static void main(String[] args) {
    AccessDB db = new AccessDB();
    db.connect1();
    db.executeQuery("CREATE TABLE Greetings (Message CHAR(20))");
    db.close();
    }
    }
      

  6.   

    1、是的 
    2、Access数据库连接,只能通过JDBC/ODBC桥连接,不是因为没有服务器,而是因为没有人为ACCESS写JDBC驱动
      

  7.   

    连接Access 的时候,也可以用JDBC,而且不需要用驱动程序....
      

  8.   

    呵呵,你现在用的办法就是JDBC-ODBC桥啊
      

  9.   


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;/**
     * 连接各类数据库的方法
     */
    public class DBConnector {
    /**
     * 获得数据库连接
     * @param driverClassName 连接数据库用到的驱动类的类名
     * @param dbURL 数据库的URL
     * @param userName 登陆数据库的用户名
     * @param password 登陆数据库的密码
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static Connection getConnection(String driverClassName,
    String dbURL, String userName, String password)
    throws ClassNotFoundException, SQLException {
    Connection con = null; // 加载连接数据库的驱动类
    Class.forName(driverClassName);
    // 用用户名、密码连接数据库
    con = DriverManager.getConnection(dbURL, userName, password); return con;
    }

    /**
     * 获得Oracle数据库的连接
     * @param dricerClassName 连接数据库用到的驱动类的类名
     * @param serverHost 数据库所在服务器的IP或域名
     * @param serverPort 数据库所在服务器的端口
     * @param dbName 数据库名
     * @param userName 登陆数据库的用户名
     * @param password 登陆数据库的密码
     * @return
     * @throws ClassNotFoundException 数据库驱动类无法找到是抛出该异常
     * @throws SQLException 创建连接时可能抛出该异常
     */
    public static Connection getOracleConnection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "oracle.jdbc.driver.OracleDriver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "1521";
    }
    // 构建访问Oracle数据库的URL
    String dbURL = "jdbc:oracle:thin:@" + serverHost + ":" + serverPort
    + ":" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    }

    /**
     * 获得DB2数据库的连接
     */
    public static Connection getDB2Connection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "com.ibm.db2.jdbc.app.DB2Driver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "5000";
    }
    // 构建访问DB2数据库的URL
    String dbURL = "jdbc:db2://" + serverHost + ":" + serverPort
    + "/" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    }

    /**
     * 获得SQL Server数据库的连接
     */
    public static Connection getSQLServerConnection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "1433";
    }
    // 构建访问SQL Server数据库的URL
    String dbURL = "jdbc:microsoft:sqlserver://" + serverHost + ":" + serverPort
    + "; DatabaseName=" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    }

    /**
     * 获得MySQL数据库的连接
     */
    public static Connection getMySQLConnection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "com.mysql.jdbc.Driver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "3306";
    }
    // 构建访问SQL Server数据库的URL
    String dbURL = "jdbc:mysql://" + serverHost + ":" + serverPort
    + "/" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    }

    /**
     * 获得Sybase数据库的连接
     */
    public static Connection getSybaseConnection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "com.sybase.jdbc3.jdbc.SybDriver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "5007";
    }
    // 构建访问SQL Server数据库的URL
    String dbURL = "jdbc:sybase:Tds:" + serverHost + ":" + serverPort
    + "/" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    }

    /**
     * 获得PostgreSQL数据库的连接
     */
    public static Connection getPostgreSQLConnection(String dricerClassName,
    String serverHost, String serverPort, String dbName,
    String userName, String password) throws ClassNotFoundException,
    SQLException {
    // 如果没有提供这些连接参数,则用默认值
    if (dricerClassName == null) {
    dricerClassName = "org.postgresql.Driver";
    }
    if (serverHost == null) {
    serverHost = "127.0.0.1";
    }
    if (serverPort == null) {
    serverPort = "5432";
    }
    // 构建访问SQL Server数据库的URL
    String dbURL = "jdbc:postgresql://" + serverHost + ":" + serverPort
    + "/" + dbName;
    return getConnection(dricerClassName, dbURL, userName, password);
    } public static void main(String[] args) throws ClassNotFoundException, 
    SQLException {
    // 获得本地MySQL的连接实例,使用MySQL需要去www.mysql.com下载最新的MySQL安装程序和Java驱动
    // MySQL有多个连接MySQL的驱动类,如org.gjt.mm.mysql.Driver。
    // 这里使用MySQL官方网站上提供的驱动类
    String mySQLDirver = "com.mysql.jdbc.Driver";
    String dbName = "studentdb";
    String userName = "test";
    String password = "test";
    Connection con = DBConnector.getMySQLConnection(mySQLDirver,
    null, null, dbName, userName, password);
    System.out.println("连接MySQL数据库成功!");
    con.close();
    System.out.println("成功关闭与MySQL数据库的连接!");
    String url = "jdbc:mysql://127.0.0.1:3306/" +  dbName;
    con = DBConnector.getConnection(mySQLDirver, url, userName, password);
    System.out.println("连接MySQL数据库成功!");
    con.close();
    System.out.println("成功关闭与MySQL数据库的连接!");
    }
    }
      

  10.   

    多谢楼上所有的朋友,连接数据库这块我基本上会了。现在的问题是,如何通过程序代码创建一个Access 数据库?