环境:win7、mysql5、myeclipse
说明:本文记录java使用jdbc查询数据库的最基础最直接的步骤,以后将继续深入。数据库部分自己创建。
准备:把数据库的驱动加入到构建路径中
1、加载驱动程序并注册驱动(首先把mysql的注册驱动放入构建路径)
2、获取与数据库的连接
3、得到代表SQL语句的对象,并发送SQL给数据库
4、如果有查询结果,得到封装了查询结果的对象
5、遍历结果
6、释放占用的资源
代码+注释如下:
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcDemo1 {
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
//1.加载驱动程序并注册驱动:Drivermanager
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2.获取与数据库的连接:Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","mysql");
//3.得到代表SQL语句的对象,并发送SQL给数据库:Statement
Statement stmt = conn.createStatement();
//4.如果有查询结果,得到封装了查询结果的对象RsultSet
ResultSet rs = stmt.executeQuery("select * from users");
//5.遍历结果
while(rs.next()){
System.out.println("-------");
System.out.println(rs.getObject("id"));
System.out.println(rs.getObject("name"));
System.out.println(rs.getObject("password"));
System.out.println(rs.getObject("email"));
System.out.println(rs.getObject("birthday"));
}
//6.释放资源
rs.close();
stmt.close();
conn.close();
}
}
这样最基本的查询就完成了,但是有问题,下面是问题及解决:
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcDemo1 {
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.加载驱动程序并注册驱动:Drivermanager
//DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不可取:1.严重依赖驱动包。2.导致注册2次。更改如下:
Class.forName("com.mysql.jdbc.Driver");//加载类的静态代码块,就可以实现注册了。
//2.获取与数据库的连接:Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","mysql");
//3.得到代表SQL语句的对象,并发送SQL给数据库:Statement
//Statement stmt = conn.createStatement();//更改如下后有这些优势:1、预编译SQL语句,数据库执行效率高。2、防止SQL注入3、支持参数占位符"?"
PreparedStatement stmt = null;
//4.如果有查询结果,得到封装了查询结果的对象RsultSet
//ResultSet rs = stmt.executeQuery("select * from users");
stmt = conn.prepareStatement("select * from users");
ResultSet rs = stmt.executeQuery();
//5.遍历结果
while(rs.next()){
System.out.println("-------");
System.out.print(rs.getObject("id"));
System.out.print(rs.getObject("name"));
System.out.print(rs.getObject("password"));
System.out.print(rs.getObject("email"));
System.out.println(rs.getObject("birthday"));
}
//6.释放资源
rs.close();
stmt.close();
conn.close();
}
}
这样的话,看着比较像样了,为了说明问题注释较多,可以去掉再看就清爽多了。这样就是实现了最基础的mysql连接。但是还有如下问题要解决:
1.mysql的配置信息在代码内,这样数据库有更改后就必须更改源代码,所以需要把数据库信息提取放到配置文件中,这里用properties文件。
2.真正的项目中不可能把数据库连接还有操作放在一个文件,内容过多,且数据库连接很固定,可以提出单独的jdbc文件,一直沿用。
3.很多问题以后再说,最终的目的是得到一个通用的版本。。。