在工作开发中,我们在做项目时,需要用到数据库,Java程序于数据哭连接方法有两种,一种是使用JDBC-ODBC桥接器于数据库连接,一种是用纯Java的JDBC驱动程序实现与数据库连接。
而今天我只讲解用纯Java的JDBC驱动程序实现数据库连接,因为我用的是eclipse,所以我用eclipse来讲解。
第一步、创建一个java项目,创建一个目录为lib的文件夹,然后把mysql数据库jar包放进去。
第二步、右键项目名,选择Build Path,再选择Configure build path
Connection对象
数据库连接工具类:
public class DBUtils {
private static final String DRIVER="com.mysql.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost:3306/test";
private static final String USERNAME="root";
private static final String PASSWORD="root";
private Connection connection=null;
//获得数据库连接对象
public Connection getConnection(){
try {
Class.forName(DRIVER);
connection=DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return connection;
}
}
测试类:
public class Test {
public static void main(String[] args) {
//创建数据库连接工具类对象
DBUtils db=new DBUtils();
//获得数据库连接对象con
Connection con=db.getConnection();
System.out.println("如果运行到这里没报错,就说明数据库连接上了");
}
}
在运行之前,需要打开mysql的服务。
运行结果:
如果运行到这里没报错,就说明数据库连接上了
接下来,我们执行sql语句。
public class Test {
public static void main(String[] args) throws SQLException {
String sql="insert into testtable (id,name,pwd) values (10,'张三','123456')";
//创建数据库连接工具类对象
DBUtils db=new DBUtils();
//获得数据库连接对象con
Connection con=db.getConnection();
//获得statement对象
Statement st=con.createStatement();
//执行sql语句,返回影响数据库数据的条数
int result=st.executeUpdate(sql);
//如果大于0,说明数据插入成功
if(result>0){
System.out.println("数据插入成功");
}else{
System.out.println("数据插入失败");
}
}
}
运行结果:
数据插入成功
看看数据库:
当然最后不要忘记关闭数据库对象,释放无用的资源。
PreparedStatement预编译
而这样的sql语句是写死了的,很多时候我们都需要从前端页面得到数据,然后拼接sql语句,再执行数据库操作。这时候可以使用PreparedStatement类(预编译处理类),这个类是Statement类的子类,重写了Statement类的主要方法。接下来,我们来看看如何使用这个类。
public class Test {
public static void main(String[] args) throws SQLException {
findTableById(10);
}
public static void findTableById(int id) throws SQLException{
//sql语句中使用占位符
String sql="select * from testtable where id=?";
//创建数据库连接工具类对象
DBUtils db=new DBUtils();
//获得数据库连接对象con
Connection con=db.getConnection();
//对sql语句预编译处理
PreparedStatement prs=con.prepareStatement(sql);
//对sql语句中的占位符set值,下标从1开始算起
prs.setInt(1, id);
//执行sql语句,返回查询到的结果集
ResultSet rs=prs.executeQuery();
while(rs.next()){
System.out.println("查询到的结果为:"+rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3));
}
}
}
预编译处理类PrepareStatement,在sql语句中先用”?“来做占位符,然后下面从Connection中得到PreparedStatement对象对SQL语句进行预编译,然后set值,此时set值下标从1开始,然后接着执行sql语句。
运行结果:
查询到的结果为:10,张三,123456
结果集ResultSet类
ResultSet结果集是查询数据时使用的(select查询),查询到结果后,调用
//执行sql语句,返回查询到的结果集
ResultSet rs=prs.executeQuery();
这条语句返回结果集,最后用while语句来查询结果集中的所有数据。
ResultSet rs=prs.executeQuery();
while(rs.next()){
System.out.println("查询到的结果为:"+rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3));
}
同样,结果集中get数据也是下标从1开始。