1.用JavaBean封装一条记录
首先要创建一个类,用来存储数据库中的记录,一条记录中有多个变量,所以该类中也应该有多个变量,该函数的返回值是一个类的对象。
@Test
public static Student SelectById(Long idd) throws Exception {//用对象装一条记录
Connection conn=null;
Statement st=null;
ResultSet rs=null;
Student stu1=null;
//1导入驱动包
try {
//2加载驱动
Class.forName("com.mysql.jdbc.Driver");
//3铺管道,简历Java到MySQL链接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/login?useSSL=false", "root", "root");
//4创建车
st=conn.createStatement();
//5将sql装车发送到mysql数据库中去
String sql="SELECT * FROM sorce where id="+ idd +"";
rs=st.executeQuery(sql);//结果集
while(rs.next())
{
long id=rs.getLong("id");
String stuname=rs.getString("stuname");
Float javaSorce=rs.getFloat("javaSorce");
//System.out.println(id+" "+stuname+" "+javaSorce);
stu1=new Student(id,stuname,javaSorce);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发生错误了");
e.printStackTrace();
}
finally {
//6释放资源
rs.close();
st.close();
conn.close();
}
return stu1;
}
Student类定义为
package cn.java.entity;
public class Student {
@Override
public String toString() {
// TODO Auto-generated method stub
return "Student[id="+id+",stuName="+name+",javaSorce="+javaSorce+"]";
}
private Long id;
private String name;
private Float javaSorce;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(Long id,String stuname,Float javaSorce) {
this.id=id;
this.name=stuname;
this.javaSorce=javaSorce;
// TODO Auto-generated constructor stub
}
}
运行结果
?2.用Map封装一条记录。
@Test
public static Map<String, Object> SelectById2(Long idd) throws Exception {//用Map装一条数据
Connection conn=null;
Statement st=null;
ResultSet rs=null;
Map<String, Object> aMap=new HashMap<String, Object>();
//1导入驱动包
try {
//2加载驱动
Class.forName("com.mysql.jdbc.Driver");
//3铺管道,简历Java到MySQL链接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/login?useSSL=false", "root", "root");
//4创建车
st=conn.createStatement();
//5将sql装车发送到mysql数据库中去
String sql="SELECT * FROM sorce where id="+ idd +"";
rs=st.executeQuery(sql);//结果集
while(rs.next())
{
long id=rs.getLong("id");
String stuname=rs.getString("stuname");
Float javaSorce=rs.getFloat("javaSorce");
//System.out.println(id+" "+stuname+" "+javaSorce);
aMap.put("id", id);
aMap.put("stuname", stuname);
aMap.put("javaSorce", javaSorce);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发生错误了");
e.printStackTrace();
}
finally {
//6释放资源
rs.close();
st.close();
conn.close();
}
return aMap;
}
打印结果为
?可以通过两种方法对Map中的每一个键值对进行遍历,第一种方法利用Entry,每一次循环需要取出其中的Key和Value;
第二种方法要在JDK1.8以上才可以使用,利用forEach函数。
?3.用List封装多条对象记录,其实就只把多个Student对象封装到List集合中
@Test
public static List<Student> SelectById3() throws Exception {//用List装多条对象记录
Connection conn=null;
Statement st=null;
ResultSet rs=null;
Student stu1=null;
List<Student> stulist=new ArrayList<Student>();
//1导入驱动包
try {
//2加载驱动
Class.forName("com.mysql.jdbc.Driver");
//3铺管道,简历Java到MySQL链接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/login?useSSL=false", "root", "root");
//4创建车
st=conn.createStatement();
//5将sql装车发送到mysql数据库中去
String sql="SELECT * FROM sorce";
rs=st.executeQuery(sql);//结果集
while(rs.next())
{
long id=rs.getLong("id");
String stuname=rs.getString("stuname");
Float javaSorce=rs.getFloat("javaSorce");
//System.out.println(id+" "+stuname+" "+javaSorce);
stu1=new Student(id,stuname,javaSorce);
stulist.add(stu1);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发生错误了");
e.printStackTrace();
}
finally {
//6释放资源
rs.close();
st.close();
conn.close();
}
return stulist;
}
运行结果为
4. 用List集合封装Map,可以装多条记录,返回值为List集合
@Test
public static List<Map<String, Object>> SelectById4() throws Exception {//用List装多条Map记录
Connection conn=null;
Statement st=null;
ResultSet rs=null;
List<Map<String, Object>> StuMap=new ArrayList<Map<String,Object>>();
//1导入驱动包
try {
//2加载驱动
// Class.forName("com.mysql.jdbc.Driver");
//3铺管道,简历Java到MySQL链接
conn=jdbcUtil.getConn();
//4创建车
st=conn.createStatement();
//5将sql装车发送到mysql数据库中去
String sql="SELECT * FROM sorce";
rs=st.executeQuery(sql);//结果集
while(rs.next())
{
long id=rs.getLong("id");
String stuname=rs.getString("stuname");
Float javaSorce=rs.getFloat("javaSorce");
//System.out.println(id+" "+stuname+" "+javaSorce);
Map<String, Object> hMap=new HashMap<String, Object>();
hMap.put("id", id);
hMap.put("stuname", stuname);
hMap.put("javaSorce", javaSorce);
StuMap.add(hMap);
}
} catch (Exception e) {
// TODO: handle exception
System.out.println("发生错误了");
e.printStackTrace();
}
finally {
//6释放资源
jdbcUtil.close(rs, st, conn);
}
return StuMap;
}
运行结果为
?5.配置数据库链接的Properties文件,这样的话如果修改数据库,修改配置文件即可,不用在代码中修改。
配置文件
?读取文件中的数据,需要先创建一个Properties对象,在写代码过程中,可以简化一些步骤,创建JdbcUtil工具类,再存到eclipse模板中,这样就可以随时方便调用了,可以简化许多过程。
package cn.java.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class jdbcUtil {
private static String driver=null;
private static String url=null;
private static String username=null;
private static String password=null;
static {
// TODO Auto-generated method stub
//读取properties文件
//1.创建一个properties对象
Properties prop=new Properties();
//将prop对象与jdbc与Properties产生关联
InputStream ins = jdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
try {
prop.load(ins);
//读取数据
driver= prop.getProperty("driver");
url= prop.getProperty("url");
username= prop.getProperty("username");
password= prop.getProperty("password");
//System.out.println(driver+url+username+password);
Class.forName(driver);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConn() throws Exception {
return DriverManager.getConnection(url,username,password);
}
public static void close(ResultSet rs,Statement st,Connection conn) throws Exception {
if(rs!=null)
rs.close();
if(st!=null)
st.close();
if(conn!=null)
conn.close();
}
}
如在创建连接时可以?conn=jdbcUtil.getConn();
在释放连接时可以? ?jdbcUtil.close(rs, st, conn);
6.使用DBUtil框架可以简化很多流程,数据库的增删改查都只需要一行,首先需要导入jar包。
然后就是一下命名规范:
cn.java.dao.Impl:存放操作数据库的代码
cn.java.entity:存放实体类
cn.java.utils:存放工具类
resource:存放配置文件,而且新建文件夹是Source Folder
?
?首先是添加数据,第一种是写死的,第二种可以传递参数,参数用问号代替。
public void Insert() throws Exception { //添加数据
int flag=qr.update(jdbcUtil.getConn(),"INSERT INTO sorce SET id=4,stuname='zqf',javaSorce=80");
System.out.println(flag);
}
public static void Insert2(Long id,String stuname,Float javaSorce) throws Exception//添加数据
{
int flag=qr.update(jdbcUtil.getConn(), "INSERT INTO sorce SET id=?,stuname=?,javaSorce=?", new Object[] {id,stuname,javaSorce});
System.out.println(flag);
}
接下来是使用框架查询数据库记录的四种情况:
@Test
public void getUserById1() throws Exception { //用javabean装一条记录
User user=qr.query(jdbcUtil.getConn(), "SELECT * FROM sorce WHERE id=1", new BeanHandler<User>(User.class));
System.out.println(user);
}
@Test
public void getUserById2() throws Exception { //用Mao封装一条记录
Map<String, Object> hmap=qr.query(jdbcUtil.getConn(), "SELECT * FROM sorce WHERE id=2", new MapHandler());
System.out.println(hmap);
}
@Test
public void getUserById3() throws Exception { //用javabean封装多条记录
List<User> userList=qr.query(jdbcUtil.getConn(), "SELECT * FROM sorce", new BeanListHandler<User>(User.class));
for(User user:userList)
System.out.println(user);
}
@Test
public void getUserById4() throws Exception { //用ListMap封装多条记录
List<Map<String, Object>> stuMap=qr.query(jdbcUtil.getConn(), "SELECT * FROM sorce", new MapListHandler());
for(Map<String, Object> hMap:stuMap)
System.out.println(hMap);
}
使用框架之后省略了很多步骤,配置好文件之后可以直接使用Sql语句对数据库进行操作。
|