2、几个常用的重要技巧:可滚动、更新的记录集 、 批量更新 、事务处理1、取得数据库连接1)用DriverManager取数据库连接例子:String className,url,uid,pwd
className = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr
uid = "system"
pwd = "manager"
Class.forName(className)
Connection cn = DriverManager.getConnection(url,uid,pwd)2)用jndi(java的命名和目录服务)方式例子String jndi = "jdbc/db"
Context ctx = (Context) new InitialContext().lookup("java:comp/env")
DataSource ds = (DataSource) ctx.lookup(jndi)
Connection cn = ds.getConnection() //多用于jsp中2、执行sql语句1)用Statement来执行sql语句String sql
Statement sm = cn.createStatement()
sm.executeQuery(sql)// 执行数据查询语句(select)
sm.executeUpdate(sql)// 执行数据更新语句(delete、update、insert、drop等)statement.close()2)用PreparedStatement来执行sql语句String sql
sql = "insert into user (id,name) values (?,?)"
PreparedStatement ps = cn.prepareStatement(sql)
ps.setInt(1,xxx)
ps.setString(2,xxx)
...
ResultSet rs = ps.executeQuery()// 查询
int c = ps.executeUpdate()// 更新3、处理执行结果查询语句,返回记录集ResultSet。更新语句,返回数字,表示该更新影响的记录数。ResultSet的方法:1、next(),将游标往后移动一行,如果成功返回true;否则返回false。2、getInt("id")或getSting("name"),返回当前游标下某个字段的值。3、释放连接。cn.close()一般,先关闭ResultSet,然后关闭Statement(或者PreparedStatement);最后关闭Connection可滚动、更新的记录集1、创建可滚动、更新的StatementStatement sm=cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,
ResultSet.CONCUR_READ_ONLY)该Statement取得的ResultSet就是可滚动的2、创建PreparedStatement时指定参数PreparedStatemet ps=cn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)ResultSet.absolute(9000)批量更新1、StatementStatement sm = cn.createStatement()
sm.addBatch(sql1)
sm.addBatch(sql2)
...
sm.executeBatch()一个Statement对象,可以执行多个sql语句以后,批量更新。这多个语句可以是delete、update、insert等或兼有2、PreparedStatementPreparedStatement ps = cn.preparedStatement(sql)
{
ps.setXXX(1,xxx)
...
ps.addBatch()
}
ps.executeBatch()一个PreparedStatement,可以把一个sql语句,变换参数多次执行,一次更新。事务的处理1、关闭Connection的自动提交cn.setAutoCommit(false)2、执行一系列sql语句要点:执行每一个新的sql语句前,上一次执行sql语句的Statement(或者PreparedStatemet)必须先closeStatement sm
sm = cn.createStatement(insert into user...)
sm.executeUpdate()
sm.close()sm = cn.createStatement("insert into corp...)
sm.executeUpdate()
sm.close()3、提交cn.commit()
导入java.sql包 \x0d\x0a一、加载要连接数据库的驱动程序 \x0d\x0a//Jdbc-Odbc桥 和 Microsoft Access 数据库 \x0d\x0aClass.forName("sun.jdbc.odbc.JdbcOdbcDriver")\x0d\x0a// SQL Server 驱动程序: \x0d\x0aClass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")\x0d\x0a注:Class.forName()方法将给定的类加载到JVM,如果系统中不存在给定的类,则会引发异常 \x0d\x0a二、通过驱动程序管理器得到连接实例 \x0d\x0aConnection conn=null\x0d\x0a//1. \x0d\x0a//1.1建立数据源 \x0d\x0aconn=DriverManager.getConnection("jdbc:odbc:MyDataSource")//MyDataSource是数据源名称 \x0d\x0a//1-2、不建立数据源 \x0d\x0aconn=DriverManager.getConnection("jdbc:odbc:Driver=Microsoft Access Driver (*.mdb)DBQ=C:\\VBTest.mdb")\x0d\x0a//2.SQL Server \x0d\x0aconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433databasename=mydb","sa","")\x0d\x0a\x0d\x0a注:DriverManager类跟踪已注册的驱动程序,通过getConnection(URL)方法, 找到一个能够连接至URL中指定的数据库驱动程序 \x0d\x0a它接收三个参数, 分别表示1 数据源的名称、类型 2 用户名(可选) 3 密码(可选) \x0d\x0a三、基于连接对象建立处理器对象 \x0d\x0aStatement stmt=conn.createStatement()\x0d\x0a四、准备sql命令 \x0d\x0aString sql="select * from Student"\x0d\x0a五、执行命令返回结果集 \x0d\x0aResultSet rs=stmt.executeQuery(sql)\x0d\x0a六、显示结果集 \x0d\x0awhile(rs.next())//只要后面有记录 \x0d\x0a{ \x0d\x0a//对当前行的所有字段遍历 \x0d\x0afor(int i=1i 回答于 2022-12-11import java.sql.Connection。
import java.sql.DriverManager
import java.sql.PreparedStatement
import java.sql.ResultSet
import java.sql.SQLException
import javax.naming.Context
import javax.naming.InitialContext
import javax.naming.NamingException
import javax.sql.DataSource
public class DBCon {
//数据库驱动对象
public static final String DRIVER="oracle.jdbc.driver.OracleDriver"
//数据库连接地址(数据库名)
public static final String URL="jdbc:oracle:thin:@localhost:1521:orcl"
//登陆名
public static final String USER="FM"
//登陆密码
public static final String PWD="FM"
//创建数据库连接对象
private Connection con=null
//创建数据库预编译对象
private PreparedStatement ps=null
//创建结果集
private ResultSet rs=null
//创建数据源对象
public static DataSource source=null
// //静态代码块
// static{
//
// //初始化配置文件context
// try {
// Context context=new InitialContext()
// source=(DataSource)context.lookup("java:comp/env/jdbc/webmessage")
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace()
// }
//
//
// }
/**
* 获取数据库连接
*/
public Connection getCon(){
try {
Class.forName(DRIVER)
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
try {
con=DriverManager.getConnection(URL,USER,PWD)
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return con
}
// /**
// * 获取数据库连接
// */
// public Connection getCon(){
//
// try {
// con=source.getConnection()
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace()
// }
//
// return con
// }
/**
* 关闭所有资源
*/
public void closeAll(){
if(rs!=null)
try {
rs.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
if(ps!=null)
try {
ps.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
if(con!=null)
try {
con.close()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
/**
* @param sql数据库更新(增、删、改) 语句
* @param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)
* @return 返回受影响都行数
*/
public int update(String sql,String... pras){
int resu=0
con=getCon()
try {
ps=con.prepareStatement(sql)
for(int i=0i<pras.lengthi++){
ps.setString(i+1,pras[i])
}
resu=ps.executeUpdate()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
finally{
closeAll()
}
return resu
}
/**
* @param sql数据库查询语句
* @param pras参数列表(可传,可不传,不传为NULL,以数组形式存在)
* @return 返回结果集
*/
public ResultSet query(String sql,String... pras){
con=getCon()
try {
ps=con.prepareStatement(sql)
if(pras!=null)
for(int i=0i<pras.lengthi++){
ps.setString(i+1, pras[i])
}
rs=ps.executeQuery()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return rs
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)