JDBC连接数据库
2011-09-14 22:17
288 查看
JDBC连接数据库
一、创建一个以JDBC连接数据库的程序,包括如下7个步骤。
加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
或者:Driver driv=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driv);
提供JDBC连接的URL
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="1234";
或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”
创建数据库的连接
Connection con;
con=DriverManager.getConnection(url,username,password);
或con=DriverManager.getConnection(urll);
创建一个Statement
Statement stat=con.createStatement();
执行SQL语句
stat.executeUpdate(sql);//sql是insert、update和delete语句
stat.executeQuery(sql);//sql是select语句
stat.execute(sql); //多个结果集、多个更新计数或组合语句
处理结果---执行结果可能会出现两种情况
执行更新返回的是本次操作影响到的记录数
执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。
ResultSet rs=stat.executeQuery(“select …”);
rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。
while(rs.next()){
//读取游标所指的记录行数据
System.out.println(“学号:”+rs.getInt(1)); 【注意:列索引号从1开始】
System.out.println(“学号:”+rs.getInt(“id”));
}
ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。
二、关闭JDBC对象
在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。
…
finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}…
}
JDBC可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。接下来通过几个简单的示例演示JDBC的应用。
PreparedStatement表示预编译的SQL语句的对象。
三、对JDBC操作数据库的工具类的封装
对获得Connection对象进行封装
将数据库的配置信息写到一个属性文件中,然后用IO流去获取,当需要修改数据库连接的时候只要改动配置文件即可。
在src下新建属性文件jdbc.properties,添加如下内容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
对关闭JDBC资源类的封装
新建DbClose.java类,添加方法关闭结果集对象、语句对象、连接对象。
在执行增加、删除、修改的时候可以使用代码关闭连接:DbClose.close(Statement stmt, Connection conn);
在执行查询之后使用如下代码关闭连接:DbClose.close(ResultSet rs, Statement stmt, Connection conn);
对执行数据库操作类的封装
在一个程序中会有很多地方要操作数据库,那么对执行数据库操作同样需要修改。新建ControlDB.java。
事例:实现增、删、改、查
package cn.hbsi.dao;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.hbsi.domain.Student;
import cn.hbsi.jdbc.JdbcUtil;
public class StudentDaoImpl implements Student1Dao {
/* 封装数据库操作的对象 */
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
/* 操作插入 */
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#insert(cn.hbsi.domain.Student)
*/
public boolean insert(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "insert into student(name,sex,resume,image) values(?,?,?,?)";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getName());
pstmt.setObject(index++, entity.getSex());
pstmt.setObject(index++, entity.getResume());
// pstmt.setBinaryStream(parameterIndex, x)
pstmt.setObject(index++, entity.getImage());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#update(cn.hbsi.domain.Student)
*/
public boolean update(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "update student set name=?,sex=?,resume=?,image=? where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getName());
pstmt.setObject(index++, entity.getSex());
pstmt.setObject(index++, entity.getResume());
// pstmt.setBinaryStream(parameterIndex, x)
pstmt.setObject(index++, entity.getImage());
pstmt.setObject(index++, entity.getId());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#delete(cn.hbsi.domain.Student)
*/
public boolean delete(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "delete from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getId());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#findAll()
*/
public List<Student> findAll() {
/* 第一步:声明返回结果变量 */
List<Student> entities = new ArrayList<Student>();
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "select id,name,sex,resume,image from student";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
/* 第六步:执行查询 */
rs = pstmt.executeQuery();
/* 第七步:判断 */
while (rs.next()) {
// 每指向一条记录就对应一个崭新的对象在循环中声明实体bean对象
Student entity = new Student();
// 为每条记录对应的对象赋值
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setSex(rs.getString("sex"));
entity.setResume(rs.getString("resume"));
entity.setImage(rs.getBinaryStream("image"));
// 把每条记录对应的对象添加到集合中进行保存
entities.add(entity);
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return entities;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#findById(java.lang.Integer)
*/
public Student findById(Integer id) {
/* 第一步:声明返回结果变量 */
Student entity = new Student();
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "select id,name,sex,resume,image from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, id);
/* 第六步:执行查询 */
rs = pstmt.executeQuery();
/* 第七步:判断 */
if (rs.next()) {
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setSex(rs.getString("sex"));
entity.setResume(rs.getString("resume"));
entity.setImage(rs.getBinaryStream("image"));
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return entity;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#deleteById(java.lang.Integer)
*/
public boolean deleteById(Integer id) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "delete from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, id);
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
public static void main(String[] args) throws Exception {
/* 创建操作对象 */
Student1Dao sdi = new StudentDaoImpl();
/*
* //准配实体bean对象 Student entity = new Student();
*
* entity.setName("redarmy"); entity.setSex("男");
* entity.setResume("redarmy是一个特有胡有理的帅哥");
* entity.setImage(StudentDaoImpl
* .class.getClassLoader().getResourceAsStream("./image/a.jpg"));
*
* //测试插入操作 sdi.insert(entity);
*/
// 测试根据id查询实体bean操作
// Student entity = sdi.findById(9);
//
// System.out.println(entity.getId()+"--"+entity.getName()+"---"+entity.getSex()+"--"+entity.getResume());
/*
* InputStream in =entity.getImage(); OutputStream out = new
* FileOutputStream("c:\\aa.jpg"); byte[] buf = new byte[1024]; int len;
* while ((len = in.read(buf)) != -1) out.write(buf, 0, len);
* in.close(); out.close();
*/
// 更新操作
// entity.setName("shenyangang");
// sdi.update(entity);
// sdi.delete(entity);
// 查询所有
List<Student> entities = sdi.findAll();
for (int i = 0; i < entities.size(); i++) {
Student entity = entities.get(i);
System.out.println(entity.getId() + "--" + entity.getName() + "---"
+ entity.getSex() + "--" + entity.getResume());
InputStream in = entity.getImage();
OutputStream out = null;
if (in != null) {
out = new FileOutputStream("c:\\" + entity.getId() + ".jpg");
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
一、创建一个以JDBC连接数据库的程序,包括如下7个步骤。
加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”);
或者:Driver driv=new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driv);
提供JDBC连接的URL
String url="jdbc:mysql://localhost:3306/test";
String username="root";
String password="1234";
或urll ="jdbc:mysql://localhost:3306/test?user=root&password=1234”
创建数据库的连接
Connection con;
con=DriverManager.getConnection(url,username,password);
或con=DriverManager.getConnection(urll);
创建一个Statement
Statement stat=con.createStatement();
执行SQL语句
stat.executeUpdate(sql);//sql是insert、update和delete语句
stat.executeQuery(sql);//sql是select语句
stat.execute(sql); //多个结果集、多个更新计数或组合语句
处理结果---执行结果可能会出现两种情况
执行更新返回的是本次操作影响到的记录数
执行查询返回的结果是一个ResultSet对象,该对象以0或多条记录的形式包含了查询结果,可以通过隐含的游标(指针)来定位数据,初始化时,游标位于第一条记录前,可以通过next()方法移动到下一条记录。
ResultSet rs=stat.executeQuery(“select …”);
rs.next();//移动游标到第一条记录,如果没有到最后一条记录的后面,方法返回true,否则返回false。
while(rs.next()){
//读取游标所指的记录行数据
System.out.println(“学号:”+rs.getInt(1)); 【注意:列索引号从1开始】
System.out.println(“学号:”+rs.getInt(“id”));
}
ResultSet对象rs中有getXXX()方法,可从当前记录行中获取指定列的信息,可通过指定列索引号或列明两种方式指定要读取的列。
二、关闭JDBC对象
在操作完成以后要把所使用的JDBC对象全部关闭,以释放JDBC资源,关闭的顺序和声明顺序相反。
…
finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}…
}
JDBC可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。接下来通过几个简单的示例演示JDBC的应用。
PreparedStatement表示预编译的SQL语句的对象。
三、对JDBC操作数据库的工具类的封装
对获得Connection对象进行封装
将数据库的配置信息写到一个属性文件中,然后用IO流去获取,当需要修改数据库连接的时候只要改动配置文件即可。
在src下新建属性文件jdbc.properties,添加如下内容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
对关闭JDBC资源类的封装
新建DbClose.java类,添加方法关闭结果集对象、语句对象、连接对象。
在执行增加、删除、修改的时候可以使用代码关闭连接:DbClose.close(Statement stmt, Connection conn);
在执行查询之后使用如下代码关闭连接:DbClose.close(ResultSet rs, Statement stmt, Connection conn);
对执行数据库操作类的封装
在一个程序中会有很多地方要操作数据库,那么对执行数据库操作同样需要修改。新建ControlDB.java。
事例:实现增、删、改、查
package cn.hbsi.dao;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import cn.hbsi.domain.Student;
import cn.hbsi.jdbc.JdbcUtil;
public class StudentDaoImpl implements Student1Dao {
/* 封装数据库操作的对象 */
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
/* 操作插入 */
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#insert(cn.hbsi.domain.Student)
*/
public boolean insert(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "insert into student(name,sex,resume,image) values(?,?,?,?)";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getName());
pstmt.setObject(index++, entity.getSex());
pstmt.setObject(index++, entity.getResume());
// pstmt.setBinaryStream(parameterIndex, x)
pstmt.setObject(index++, entity.getImage());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#update(cn.hbsi.domain.Student)
*/
public boolean update(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "update student set name=?,sex=?,resume=?,image=? where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getName());
pstmt.setObject(index++, entity.getSex());
pstmt.setObject(index++, entity.getResume());
// pstmt.setBinaryStream(parameterIndex, x)
pstmt.setObject(index++, entity.getImage());
pstmt.setObject(index++, entity.getId());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#delete(cn.hbsi.domain.Student)
*/
public boolean delete(Student entity) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "delete from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, entity.getId());
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#findAll()
*/
public List<Student> findAll() {
/* 第一步:声明返回结果变量 */
List<Student> entities = new ArrayList<Student>();
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "select id,name,sex,resume,image from student";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
/* 第六步:执行查询 */
rs = pstmt.executeQuery();
/* 第七步:判断 */
while (rs.next()) {
// 每指向一条记录就对应一个崭新的对象在循环中声明实体bean对象
Student entity = new Student();
// 为每条记录对应的对象赋值
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setSex(rs.getString("sex"));
entity.setResume(rs.getString("resume"));
entity.setImage(rs.getBinaryStream("image"));
// 把每条记录对应的对象添加到集合中进行保存
entities.add(entity);
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return entities;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#findById(java.lang.Integer)
*/
public Student findById(Integer id) {
/* 第一步:声明返回结果变量 */
Student entity = new Student();
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "select id,name,sex,resume,image from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, id);
/* 第六步:执行查询 */
rs = pstmt.executeQuery();
/* 第七步:判断 */
if (rs.next()) {
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setSex(rs.getString("sex"));
entity.setResume(rs.getString("resume"));
entity.setImage(rs.getBinaryStream("image"));
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return entity;
}
/*
* (non-Javadoc)
*
* @see cn.hbsi.dao.Student1Dao#deleteById(java.lang.Integer)
*/
public boolean deleteById(Integer id) {
/* 第一步:声明返回结果变量 */
boolean flag = false;
try {
/* 第二步:获取连接对象 */
conn = JdbcUtil.getConnection();
/* 第三步:定义sql语句 */
String sql = "delete from student where id=?";
/* 第四步:根据sql语句创建预处理对象 */
pstmt = conn.prepareStatement(sql);
/* 第五步:为站位符赋值 */
int index = 1;
pstmt.setObject(index++, id);
/* 第六步:执行更新 */
int i = pstmt.executeUpdate();
/* 第七步:判断 */
if (i > 0) {
flag = true;
}
/* 第八步:释放资源 */
JdbcUtil.release(rs, pstmt, conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/* *****修改返回变量值 */
return flag;
}
public static void main(String[] args) throws Exception {
/* 创建操作对象 */
Student1Dao sdi = new StudentDaoImpl();
/*
* //准配实体bean对象 Student entity = new Student();
*
* entity.setName("redarmy"); entity.setSex("男");
* entity.setResume("redarmy是一个特有胡有理的帅哥");
* entity.setImage(StudentDaoImpl
* .class.getClassLoader().getResourceAsStream("./image/a.jpg"));
*
* //测试插入操作 sdi.insert(entity);
*/
// 测试根据id查询实体bean操作
// Student entity = sdi.findById(9);
//
// System.out.println(entity.getId()+"--"+entity.getName()+"---"+entity.getSex()+"--"+entity.getResume());
/*
* InputStream in =entity.getImage(); OutputStream out = new
* FileOutputStream("c:\\aa.jpg"); byte[] buf = new byte[1024]; int len;
* while ((len = in.read(buf)) != -1) out.write(buf, 0, len);
* in.close(); out.close();
*/
// 更新操作
// entity.setName("shenyangang");
// sdi.update(entity);
// sdi.delete(entity);
// 查询所有
List<Student> entities = sdi.findAll();
for (int i = 0; i < entities.size(); i++) {
Student entity = entities.get(i);
System.out.println(entity.getId() + "--" + entity.getName() + "---"
+ entity.getSex() + "--" + entity.getResume());
InputStream in = entity.getImage();
OutputStream out = null;
if (in != null) {
out = new FileOutputStream("c:\\" + entity.getId() + ".jpg");
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
相关文章推荐
- JDBC/ODBC/.NET连接数据库/数据文件的连接字符串大全
- 利用jdbc连接 对数据库的基本操作
- JDBC连接数据库
- JDBC 连接数据库 事物处理
- JDBC连接各种数据库经验技巧集萃
- 关于利用JDBC连接sqlserver中数据库的问题
- jdbc连接数据库
- 关于利用JDBC连接sqlserver中数据库的问题
- 用JDBC连接Vertica数据库后插入一行数据的例子源代码(接上篇)
- JAVA中关于JDBC与JDBC-ODBC数据源连接数据库的区别
- 一个JDBC连接数据库的例子
- 完整java开发中JDBC连接数据库代码和步骤
- java JDBC数据库连接封装和实例代码
- Android———利用JDBC连接服务器数据库
- JDBC连接数据库
- 完整java开发中JDBC连接数据库代码和步骤
- [置顶] 完整java开发中JDBC连接数据库代码和步骤
- JDBC—Java的数据库连接
- 常用JDBC连接数据库方法总结
- 常用数据库的JDBC连接代码