colType[idx]=rsmd.getColumnType(col);
//如果结果集支持更新操作,可以通过结果集完成更新、删除和插入操作。
Statementstmt=conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
ResultSetrs=stmt.executeQuery(“selectauthorfrombooklistwhereisbn=111”);
rs.next();
rs.updateString(“author”,”JerryChoi”);
rs.updateRow();
//插入记录
ResultSetrs=stmt.executeQuery(“selectauthor,title,isbnfrombooklist”);
rs.moveToInsertRow();
//设置每一列的值
rs.updateString(1,”aaa”);
rs.updateString(2,”bbb”);
rs.updateLong(3,1234);
//插入一行
rs.insertRow();
rs.moveToCurrentRow();
//删除记录
rs.absolute(4);
rs.deleteRow();
三、连接数据库的基本过程
基本过程如下:
l建立数据源
l导入用到的包
l加载驱动程序
l创建与数据库的连接
l创建语句对象
l编写SQL语句
l执行SQL语句
l处理数据
l关闭相关对象
l处理异常
1. 建立数据源
假设已经存在名为bookstore的MySQL数据库。
2. 导入用到的包
importjava.sql.*;
3. 加载驱动程序
//如果驱动程序和名字是MyDriver,加载驱动程序的语句是:
Class.forName(“MyDriver”);
//或者
Class.forName(“MyDriver”).newInstance();
//本例中使用MySQL,刚加载的语句为:
Class.forName(“com.mysql.jdbc.Driver”);
4. 创建与数据库的连接
连接数据库需要知道如下信息:
l数据库所在的主机,所使用的端口等
l数据库的名字
l用户信息,包括用户名和口令
//连接数据库的格式如下:
//constr:
连接字符串;user:
用户名;passwd:
口令
Connectioncon=DriverManager.getConnection(constr,user,passwd);
//MySQL数据库的连接示例如下:
Connectioncon=DriverManager.getConnection(“jdbc:
mysql:
//localhost:
3306/bookstore”,”root”,”root”);
以下表格是常用的数据库驱动程序名字和URL格式:
数据库
驱动程序
URL
Oracle
oracle.jdbc.driver.OracleDriver
jdbc:
oracle:
thin:
@dbip:
port:
databasename
dbip :
数据库服务器的IP地址,如果是本地可写localhost或127.0.0.1。
port :
数据库的监听端口,需要看安装时的配置,缺省为1521。
databasename:
数据库的SID,通常为全局数据库的名字。
SQLServer
com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:
microsoft:
sqlserver:
//dbip:
port;DatabaseName=databasename
dbip :
数据库服务器的IP地址,如果是本地可写localhost或127.0.0.1。
port :
数据库的监听端口,需要看安装时的配置,缺省为1433。
databasename:
数据库的SID,通常为全局数据库的名字。
DB2
com.ibm.db2.jdbc.app.DB2Driver
jdbc:
db2:
//dbip:
port/databasename
dbip :
数据库服务器的IP地址,如果是本地可写localhost或127.0.0.1。
port :
数据库的监听端口,需要看安装时的配置。
databasename:
数据库的SID,通常为全局数据库的名字。
Informix
com.informix.jdbc.IfxDriver
jdbc:
infoxmix-sqli:
//dbip:
port/testDB:
INFORMIXSERVER=databasename;user=username;password=userpassword
dbip :
数据库服务器的IP地址,如果是本地可写localhost或127.0.0.1。
port :
数据库的监听端口,需要看安装时的配置。
databasename:
数据库的SID,通常为全局数据库的名字。
user:
用户名
password:
用户口令
Sybase
com.sybase.jdbc.SybDriver
jdbc:
sybase:
Tds:
dbip:
port/databasename
dbip :
数据库服务器的IP地址,如果是本地可写localhost或127.0.0.1。
port :
数据库的监听端口,需要看安装时的配置。
databasename:
数据库的SID,通常为全局数据库的名字。
MySQL
com.mysql.jdbc.Driver
或
org.gjt.mm.mysql.Driver
jdbc:
mysql:
//dbip:
port/databasename[?
param1=value1][¶m2=value2]……
注:
[]是可选的选项
dbip :
数据库服务器的IP地址,如果是本地可写成localhost或127.0.0.1。
port:
数据库的监听端口,需要看安装时的配置,缺省为3306。
databasename:
数据库的SID,通常为全局数据库的名字。
param1、param2、value1和value2:
附加参数,常见参数如下:
luser:
用户名
lpassword:
密码
lautoReconnect:
联机失败时是否重新联机(true/false)
lmaxReconnect:
尝试重新联机次数
linitialTimeout:
尝试重新联机间隔
lmaxRows:
传回最大行数
luseUnicode:
是否使用Unicode编码(ture/false)
lcharacterEncoding:
何种编码
lrelaxAutocommit:
是否自动提交(true/false)
lcapitalizeTypeNames:
数据定义的名称以大写表示
PostgreSQL
org.postgresql.Driver
jdbc:
postgresql:
//dbip:
port/databasename
dbip :
数据库服务器的IP地址,如果是本地可写成localhost或127.0.0.1。
port:
数据库的监听端口,需要看安装时的配置。
databasename:
数据库的SID,通常为全局数据库的名字。
Access
sun.jdbc.odbc.JdbcOdbcDriver
jdbc:
odbc:
datasourcename
datasourcename:
数据库的SID,通常为全局数据库的名字。
注:
该驱动只能工作在Windows系统中,首先需要在操作系统中建立一个可以访问Access数据库的本地数据源(ODBC),如果名字为allandb,那么URL写法如下:
jdbc:
odbc:
allandb
5. 创建语句对象
语句对象的作业就是执行SQL语句。
语句对象的创建是通过连接对象创建的,所以在创建语句对象之前应该确保连接对象已经创建。
以下代码是创建语句对象的代码,不管连接什么数据库,不管执行什么样的操作,这句代码不用改:
Statementstmt=con.createStatement();
6. 编写SQL语句
示例代码如下:
Stringsql=“select*fromusertable”;
7. 执行SQL语句
常用的执行SQL语句的方法有以下两个:
返回值
方法
说明
ResultSet
executeQuery(Stringsql)
主要用于执行有结果集返回的SQL语句,典型的就是select查询语句。
int
executeUpdate(Stringsql)
主要用于执行没有结果集返回的SQL语句,如果要在数据库中添加、修改或删除信息,它们都没有返回值,应该使用本方法。
该方法的返回值是一个整数,表示影响数据库中记录的个数。
例如,要执行上面的查询语句,可以使用如下代码:
ResultSetrs=stmt.executeQuery(sql);
8. 处理结果集
可参照上面的“结果集及其常见方法”
注:
对行的遍历,使用结果集的next()方法。
要获取某一列,可以使用getXXX(intcolumnIndex)或getXXX(StringcolumnLabel)方法。
以下是示例代码:
//以字符串的形式获取第1列或字段名为username的列
Stringuserid=rs.getString
(1);
StringuserName=rs.getString(“username”);
9. 关闭相关对象
代码如下:
//应该按以下顺序关闭相关对象,该顺序与创建对象的顺序相反
//关闭结果集
rs.close();
//关闭语句
stmt.close();
//关闭连接
con.close();
10. 异常处理
使用以下框架对异常进行处理:
try{
……//要执行的可能出错的代码
}catch(Exceptione){
……//出错后的处理代码
}finally{
……//不管是否出错都要执行的代码
}
以下是综合示例代码:
StringclassName=“com.mysql.jdbc.Driver”;
Stringurl=“jdbc:
mysql:
//localhost:
3306/bookstore”;
Stringusername=“root”;
Stringuserpass=“root”;
StringtableName=“usertable”
Connectioncon=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
Class.forName(className);
con=DriverManager.getConnection(url,username,userpass);
pstmt=con.prepareStatement(“select*from“+tableName);
rs=pstmt.executeQuery();
while(rs.next())
{
for(inti=0;iSystem.out.println(rs.getString(i+1));
System.out.println();
}
}catch(Exceptione){
System.out.println(e.toString);
}finally{
try{rs.close();}catch(Exceptione){}
try{pstmt.close();}catch(Exceptione){}
try{con.close();}catch(Exceptione){}
}
分类:
Java