使用JDBC访问数据库
来源:互联网 发布:mac mail 163企业邮箱 编辑:程序博客网 时间:2024/05/16 02:13
1. odbc和jdbc
ODBC
提供了一组对数据库访问的标准API,一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,
通过ODBC访问不同的数据库无需对数据库访问程序进行改动。ODBC十分合理实用,被广泛采用。
o JDBC
即Java Database Connection,是按照ODBC的模式制定的,是一个通用低层的、支持基本SQL功能的java API,
这使得程序员可 以面对统一的数据库界面,无需考虑数据库的差异性。
JDBC使开发数据库无关的java产品成为可能,同时也提供了多样化的数据库连接方式。JDBC是一个将java语
言与SQL结合的API。
JDBC规范采用接口和实现分离的思想设计了Java数据库编程的框架。接口包含在java.sql及javax.sql包中,其中
java.sql属于 JavaSE,javax.sql属于JavaEE。这些接口的实现类叫做数据库驱动程序,由数据库的厂商或其它的厂商
或个人提供。
o JDBC-ODBC bridge(1)
该驱动程序的实现是通过将JDBC的调用全部委托给其它编程接口来实现的,比如ODBC。这种类型的驱动程序
需要安装本地代码库,即依赖于本地的程序,所以便携性较差。如JDBC-ODBC桥驱动程序。Application-->JDBC-ODBC
Bridge(Type1 jdbc driver)--->JDBC-ODBC Library-->ODBC Driver-->Database
适用于快速的原型系统,没有提供JDBC驱动的数据库如Access。
o 部分Java技术的本地API驱动程序(2)
该类型的驱动程序的实现是部分基于Java语言的。即该驱动程序一部分是用Java语言编写,其它部分委托本地
的数据库的客户端代码来实现。同类型1的驱动一样,该类型的驱动程序也依赖本地的程序,所以便携性较差 。
Application--->JDBC Driver(Type2 jdbc driver)--->Native Database library--->Database
比类型1性能略好。
o 全部基于Java技术的本地API驱动程序(3)
全部基于Java语言的。该类型的驱动程序通常由某个中间件服务器提供,这样客户端程序可以使用数据库无关
的协议和中间件服务器进行通信,中间件服务器再将客户端的JDBC调用转发给数据库进行处理。
Application---> JDBC Driver(Type3 jdbc driver)--->java middleware--->Database
具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。
o 全部基于Java技术的本地协议驱动程序(4)
全部基于Java语言的。该类型的驱动程序中包含了特定数据库的访问协议,使得客户端可以直接和数据库
进行通信 。
Application---> JDBC Driver(Type4 jdbc driver)--->Database
具有最大的灵活性,通常由那些非数据库厂商提供,是四种类型中最小的。
对于没有提供相应JDBC驱动程序的数据库系统,可以使用JDBC-ODBC桥接驱动程序。
应用程序使用JDBC访问数据过程:
2 使用JDBC访问数据库
2.1 与数据库建立连接
o 加载数据库驱动程序
Class.forName(驱动程序串);
或:
DriverManager.registerDriver(驱动程序实例);
o 与数据库建立连接
Connection conn = DriverManager.getConnection(dbUrl,user,password);
2.1.1 JDBC-ODBC桥形式连接数据库
//加载驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
或:
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//连接各种数据库的dsn名
String dbUrl="jdbc:odbc:dsn名称";
访问Access也可如:
dbUrl="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ=c://student.mdb";
2.1.2 JDBC直连(连接类型4)形式连接数据库
//加载具体数据库的驱动:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
或:
DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
//建立连接串
String dbUrl= "jdbc:microsoft:sqlserver://localhost:1433;databasename=student";
例各数据的驱动程序和url连接串:
o 连接MySQL:
Class.forName("org.gjt.mm.mysql.Driver");
//或Class.forName("com.mysql.jdbc.Driver");
dbUrl="jdbc:mysql://localhost/student";
o连接Oracle:
Class.forName("oracle.jdbc.driver.OracleDriver");
dbUrl="jdbc:oracle:thin:@localhost:1521:student";
o连接SQL Server2000:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
dbUrl="jdbc:microsoft:sqlserver://localhost:1433;databasename=student";
o连接DB2
Class.forName("com.ibm.db2.jdbc.app.DB2Driver");
dbUrl="jdbc:db2://localhost:5000/student";
o连接sybase
Class.forName("com.sybase.jdbc.SybDriver");
dbUrl="jdbc:sybase:Tds:localhost:5007/student";
oInformix数据库
Class.forName("com.informix.jdbc.IfxDriver");
dbUrl="jdbc:informix-sqli://123.45.67.89:1533/student:INFORMIXSERVER=myserver;";
o连接SQL Server2005
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
dbUrl="jdbc:sqlserver://localhost:1433;database=mydb";
2.1.3 访问数据库
建立连接之后,可以访问数据库,对数据库进行操作。如查询、修改、删除。
2.1.4 关闭连接
连接使用完毕,可以调用close()方法关闭连接。
注意:
在建立连接和操作数据库时可能会产生异常,需要对异常进行处理。
2.2 查询数据库
在JDBC中,数据库查询由实现接口Statement、PreparedStatement、CallableStatement的对象完成。
2.2.1 Statement
Statement对象用于一般语句的执行。要执行查询语句,首先应当创建一个Statement对象。
(1)创建Statement对象
Statement stmt=conn.createStatement();
(2)执行查询语句
ResultSet r=stmt.executeQuery("SELECT name FROM books WHERE price>20");
关闭Statemente对象
stmt.close( );
无用的Statement对象在垃圾回收时会被自动关闭。但最好在使用完Statement对象时立即关闭,
以释放资源。在关闭Statement对象时,其相应的结果集也被关闭。
2.2.2 处理结果
调用executeQuery或execute方法执行查询语句返回的结果是实现ResultSet接口的对象。我们可以对返回的
结果进行处理。
(1)ResultSet接口的基本处理方法
ResultSet对象包含了一个由查询语句返回的一个表,这个表包含所有的查询结果。
对ResultSet对象的处理必须逐行进行,而对每一行中的各个列,可以按照任何顺序进行处理。
ResultSet对象有一个指向当前行的指针。
oResultSet对象执行过程
ResultSet对象第一次调用next方法时,指针指向结果集的第一条记录,可以对第一行数据进行处理。
处理完毕后,再次调用next方法,指针移向下一行,然后继续处理数据。 next()返回类型为boolean,
如果返回值为true,则说明指针成功移向下一行,可以对该行数据进行处理。
如果返回值时false,则说明没有下一行(结果处理完毕)。
通过getXXX(字段编号)或getXXX(字段名)获取每行不同字段的数据,如:
int sno=getInt("sno"); //或getInt(1);
String sname=getString("name");//或getString(2);
(2)查询语句执行状态的处理
oexecuteQuery(String sql)
用来执行查询语句,返回一个ResultSet对象。
oexecuteUpdate(String sql)
用来执行更新语句(如UPDATE、INSERT、DELETE),返回更新的记录数。
oexecute(sql)
用来执行SQL语句,返回boolean型;如果第一个结果是ResultSet类型,则返回true,否则返回false,
一般情况下返回为false。
(3)主动获取查询结果(Statement方法)
如果当前结果是ResultSet类型,可以使用getResultSet方法获得当前结果集,然后对其进行处理。
如果当前结果是一个更新记录数,可以使用getUpdateCount方法获得更新记录数。
如果当前结果是一个ResultSet对象或没有结果了,则返回值为-1。所以首先应该检查一个结果是否是
ResultSet类型,如果不是,则可能是更新记录数,或不再有结果。 getMoreResults返回值为boolean类型,
如果下一个结果是ResultSet类型,则返回true,否则返回false。
2.2.3 PreparedStatement
Statement对象在每次执行SQL语句时,都要把SQL传递给数据库进行解析,在多次执行同一条语句时,效率很低。
ResultSet r=null;
r=stmt.executeQuery("SELECT * FROM student WHERE name='zhangsan'");
r=stmt.executeQuery("SELECT * FROM student WHERE name='lisi'");
r=stmt.executeQuery("SELECT * FROM student WHERE name='wangwu'");
如果数据库支持预编译,PreparedStatement对象可以把SQL语句传递给数据库进行预编译,以后每次执行同样的
SQL语句时,速度可以提高很多。
(1)创建一个PreparedStatement对象
PreparedStatement对象的SQL语句可以接受参数。在语句中,指出需要接受哪些参数,然后进行预编译。
在每一次执行时,可以传递给SQL语句不同的参数。
PreparedStatement是Statement接口的子接口,继承了父接口中的方法。
o PreparedStatement对象上的查询语句和更新语句都可以设置输入参数。在生成PreparedStatement对象时,
在SQL语句中用"?"标明参数,在执行SQL语句前,可以使用setType方法进行赋值。例:
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM student WHERE name=?");
o 然后使用executeQuery或executeUpdate方法来执行这个语句。
每一次执行SQL语句前都可以对参数重新赋值。
setType方法用于给相应的输入参数赋值。Type是JDBC的数据类型,如Int、String等。setType方法
有两个参数,第一个参数代表要赋值的参数在SQL语句中的位置,第一个要赋值的参数的位置为1,
第二个要赋值的参数的位置为2,以此类推。
例:
pstmt.setInt(1,100);
pstmt.setString(1,"张三");
(2)执行查询语句
ResultSet r=pstmt.executeQuery( );
该类对象在调用executeQuery方法时,无需传递给方法参数。因为在创建PreparedStatement对象时已经对需要执行
的SQL语句进行了预编译。在执行时,只要执行已经编译好的语句即可。
上述语句可以执行多次,而无需重新给出SQL语句。executeQuery方法返回一个ResultSet对象。
PreparedStatement接口有一个不带参数的execute方法,能够返回多个结果集。
(3)关闭
pstmt.close();
PreparedStatement对象可以调用close方法来进行关闭。
- 使用jdbc访问数据库
- 使用jdbc访问数据库
- 使用JDBC访问数据库
- 使用JDBC访问数据库
- 使用JDBC 访问数据库
- 使用JDBC访问数据库
- 使用JDBC驱动程序访问数据库
- 使用spring-jdbc访问数据库
- 使用JDBC实现数据库访问
- 使用JDBC驱动程序访问数据库
- Spring JDBC-使用Spring JDBC访问数据库
- 使用JDBC创建数据库访问程序
- 使用JDBC创建数据库访问程序
- java基础-使用jdbc访问数据库
- 使用JDBC创建数据库访问程序
- 使用JDBC创建数据库访问程序
- 使用JDBC创建数据库访问程序
- Spring 使用JDBC对数据库进行访问
- linux 工作队列的使用
- Objective-C位运算符
- 多线程
- struts2拦截器
- Android 从0开始自学计划
- 使用JDBC访问数据库
- Unix网络编程基础概念
- VC中读取MAT文件
- Windows7 VPN设置
- 对于不支持cookie的浏览器,使用response.encodeURL方法来使用session
- DataGrid更新数据时的一系列问题的解决
- 限时免费不可不知的秘密
- Bellman-Ford 算法详解
- Struts2引用Servlet API中的对象,request、response或session