1、JDBC的基本应用
1)创建数据库:
  create database test;  
  use test;
2)创建表:
create table student(
    id int(4) not null auto_increment,
    name varchar(20) default null,
    score int(3) default 0,
    primary key (id)
);
3)学生类:

package com.yyq;
/**
* Created by gao on 16-4-12.
*/
public class Student {
//学生Id
private int id;
//学生姓名
private String name;
//班级
private String myClass;
//分数
private double score;
//提供一个公共无参数的构造方法
public Student(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMyClass() {
return myClass;
}
public void setMyClass(String myClass) {
this.myClass = myClass;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}

4)插入一条数据:

package com.yyq;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Created by gao on 16-4-12.
*/
public class DoInsert {
private String dirver = "com.mysql.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/test";
private String user="root";
private String password="123456";
public boolean addStudent(Student stu){
Connection conn=null;
Statement st=null;
String sql="INSERT INTO student(name,class,score) values('"+stu.getName()+"'," +
"'"+stu.getMyClass()+"',"+stu.getScore()+")";
boolean flag=false;
try {
Class.forName(dirver);
conn= DriverManager.getConnection(url, user, password);
st=conn.createStatement();
int i=st.executeUpdate(sql);
if(i==1){
flag=true;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return flag;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DoInsert doinsert=new DoInsert();
Student stu=new Student();
stu.setName("xiaoming");
stu.setMyClass("java");
stu.setScore(98.00);
boolean flag=doinsert.addStudent(stu);
if(flag){
System.out.println("成功插入一条数据!");
}else{
System.out.println("插入数据失败!");
}
}
}

5)查询数据

package com.yyq;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* Created by gao on 16-4-12.
*/
public class DoSelect {
//step2:提供连接数据库所需的dirver,url,user,password
private String dirver = "com.mysql.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/test";
private String user="root";
private String password="123456";
public List<Student> findAll(){
//声明一个局部的Connection对象
Connection conn=null;
//声明一个局部的Statement 对象
Statement st=null;
//声明一个ResultSet结果集对象
ResultSet rs=null;
//定义SQL语句
String sql="select * from student";
//保存返回结果
List<Student> list=new ArrayList<Student>();
try {
//step1:加载数据库厂商提供的驱动JAR包
Class.forName(dirver);
//step3:通过DriverManager获取一个数据库连接对象
conn= DriverManager.getConnection(url, user, password);
//step4:创建一个Statement对象
st=conn.createStatement();
//step5:执行sql语句
rs=st.executeQuery(sql);
//step6:处理结果集
while(rs.next()){
Student stu=new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setMyClass(rs.getString("class"));
stu.setScore(rs.getDouble("score"));
list.add(stu);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//step7:关闭连接数据库资源
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return list;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DoSelect select=new DoSelect();
//调用查询的方法
List<Student> list=select.findAll();
for(Student stu:list){
System.out.println("Id:"+stu.getId()+"\t姓名:"+stu.getName()+"\t班级:"+stu.getMyClass()+"\t分数:"+stu.getScore());
}
}
}
6)使用PrepareStatement查询
    可以在查询语句中动态加入查询条件。首先,使用Connection的prepareStatement()方法建立好一个预编译的SQL语句——其中参数会变动的部分用“?”来占位。等到需要真正指定参数执行时,再使用相对应的setXXX(int parameterIndex, 值)方法,指定“?”处真正应该有的参数值。
package com.yyq;
import java.sql.*;
/**
* Created by gao on 16-4-12.
*/
public class PreparedSelect {
//step2:提供连接数据库所需的driver,url,user,password
private String dirver = "com.mysql.jdbc.Driver";
private String url="jdbc:mysql://localhost:3306/test";
private String user="root";
private String password="123456";
public Student findById(int id){
//声明一个局部的Connection对象
Connection conn=null;
//声明一个局部的Statement 对象
PreparedStatement pst=null;
//声明一个ResultSet结果集对象
ResultSet rs=null;
//定义SQL语句
String sql="select * from student where id=?";
//保存返回结果
Student stu = null;
try {
//step1:加载数据库厂商提供的驱动JAR包
Class.forName(dirver);
//step3:通过DriverManager获取一个数据库连接对象
conn=DriverManager.getConnection(url, user, password);
//step4:创建一个PreparedStatement对象
pst=conn.prepareStatement(sql);
pst.setInt(1, id);
//step5:执行sql语句
rs=pst.executeQuery();
//step6:处理结果集
if(rs.next()){
stu=new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setMyClass(rs.getString("class"));
stu.setScore(rs.getDouble("score"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//step7:关闭连接数据库资源
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return stu;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PreparedSelect ps=new PreparedSelect();
//调用查询方法
Student stu=ps.findById(12);
System.out.println("Id:"+stu.getId()+"\t姓名:"+stu.getName()+"\t班级:"+stu.getMyClass()+"\t分数:"+stu.getScore());
}
}
2、对JDBC操作数据库的工具类进行封装
1)对获得Connection对象进行封装
//DB_Driver
driver = com.mysql.jdbc.Driver
//DB_URL
url = jdbc:mysql://localhost:3306/test
//DB_USERNAME
username = root
//DB_PASSWORD
password = 123456

2)创建ConnectionFactory工程类,用于生产连接对象

package com.yyq.factory;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* 数据库连接对象(Connection)工厂类
*/
public class ConnectionFactory {
private static String DB_DRIVER;
private static String DB_URL;
private static String DB_USERNAME;
private static String DB_PASSWORD;
public ConnectionFactory() {
}
/**
* 在静态代码块中,获得属性文件中的driver,url,username,password
*/
static{
//step1:创建一个Properties对象
Properties pro = new Properties();
//step2:以流的形式读取属性文件中的内容
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
try {
//step3:加载流is到p对象中
pro.load(is);
DB_DRIVER = pro.getProperty("driver");
DB_URL = pro.getProperty("url");
DB_USERNAME = pro.getProperty("username");
DB_PASSWORD = pro.getProperty("password");
}catch (IOException e){
e.printStackTrace();
}
}
/**
* 该方法用来加载驱动,并获得数据库的连接对象
*
* @return 数据库连接对象conn
*/
public static Connection getConnection(){
Connection conn = null;
try {
//加载驱动
Class.forName(DB_DRIVER);
}catch (ClassNotFoundException e){
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);
}catch (SQLException e){
e.printStackTrace();
}
return conn;
}
}
3)创建CloseFactory工厂类,用于关闭连接对象

package com.yyq.factory;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Created by gao on 16-4-13.
*/
public class CloseFactory {
//关闭Connection
public static void close(Connection conn){
if (null != conn){
try{
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
//关闭Statemnt
public static void close(Statement stmt){
if (null != stmt){
try{
stmt.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
//关闭ResultSet
public static void close(ResultSet rs){
if (null != rs){
try {
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
//关闭用来执行Select的JDBC资源
public static void close(ResultSet rs, Statement stmt, Connection conn){
close(rs);
close(stmt,conn);
}
public static void close(Statement stmt, Connection conn){
close(stmt);
close(conn);
}
}

4)创建ContrlFactory工厂类,用于执行数据库操作

package com.yyq.factory;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Created by gao on 16-4-13.
*/
public class ContrlFactory {
/**
* 执行select语句
*/
public static ResultSet executeQuery(String sql) throws Exception{
ResultSet rs = null;
Statement stmt = null;
Connection conn = null;
try {
conn = ConnectionFactory.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}catch (SQLException e){
throw e;
}
return rs;
}
/**
* 执行Insert、Update、Delete语句
*/
public static void executeUpdate(String sql) throws Exception{
Connection conn = null;
Statement stmt = null;
try {
conn = ConnectionFactory.getConnection();
stmt = conn.createStatement();
stmt.executeUpdate(sql);
}catch (SQLException e){
e.printStackTrace();
}finally {
CloseFactory.close(stmt,conn);
}
}
}

5)测试类

package com.yyq;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import com.yyq.factory.ContrlFactory;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Created by gao on 16-4-13.
*/
public class JDBCTest {
Connection conn = null;
@Test
public void connectionTest(){
conn = ConnectionFactory.getConnection();
if(null == conn){
System.out.println("未获取数据库连接对象");
}else {
System.out.println("已获取数据库连接对象");
}
}
// @Test
// public void closeTest() throws SQLException {
// connectionTest();
// CloseFactory.close(null,null,conn);
// if(null == conn){
// System.out.println("数据库连接对象已关闭");
// }else {
// System.out.println("数据库连接对象未关闭");
// }
// }
@Test
public void contrlQueryTest() throws Exception {
String sql = "select * from student;";
ResultSet rs = ContrlFactory.executeQuery(sql);
while (rs.next()){
System.out.println("Id:"+rs.getInt("id")+"\t姓名:"+rs.getString("name")+"\t科目:"
+rs.getString("class")+"\t分数:"+rs.getInt("score"));
}
}
@Test
public void contrlInsertTest() throws Exception{
String sql = "insert into student(name,score,class) values('sheng',88,'linxu')";
ContrlFactory.executeUpdate(sql);
}
}

6)项目结构图:

 
 

JDBC学习总结(二)的更多相关文章

  1. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  2. Java JDBC学习实战(二): 管理结果集

    在我的上一篇博客<Java JDBC学习实战(一): JDBC的基本操作>中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利 ...

  3. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  4. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  5. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  6. JDBC学习笔记(1)——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  7. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  8. 【转】JDBC学习笔记(1)——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  9. jdbc学习总结

    jdbc学习总结:   一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供.   二.知识要点: 连接5要素,3 ...

随机推荐

  1. ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'

    OS: centos 6.3DB: 5.5.14 测试创建yoon测试表,没有主键,没有索引,基础数据内容如下: mysql> select * from yoon;+----+-------- ...

  2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解决方法 问题描述 Exception ...

  3. php开发过程中用什么方法来加快页面的加载速度

    1,数据库优化;2,php缓存;3,使用zend引擎(其它框架);4,分布式部署;5,静态

  4. 设计模式Builder(建造者)模式

    1.出现原因 在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法 ...

  5. 使用IE10登录,URL出现SessionId的解决办法

    问题:用户登入之后,URL会出现一长串字符,类似SessionId,把这一长串字符删除之后重新进入页面,页面又会自动地跳转到登录页面,所以,应该是Session没记住用户已经登录的信息. 网站环境: ...

  6. 登录超时自动退出,计算时间差-b

    // 此方法适用于所有被创建过的controller,且当前controller生命周期存在,如有错误的地方望大神斧正 //  说一下我们的需求和实现原理,需求:在点击home键退出但没有滑飞它,5分 ...

  7. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(菜单篇)

    这章主要说插件的菜单,可以说菜单是最核心的部分,前面我们已经实现了Document添加,现在主要就是生成具有层级关系的菜单,以及把菜单跟我们自定义的Document关联起来,也就是MenuPart-& ...

  8. PythonChallenge 1:恺撒密码的解码

    题目: 解题思路:根据图中的K→M,O→Q,E→G,我们可以发现K,O,E这三个字母都向后移动了2位.据说恺撒率先使用了这一加密方法,因此将其命名为恺撒密码.它的基本思想是:通过把字母移动一定的位数来 ...

  9. 2006: [NOI2010]超级钢琴 - BZOJ

    Description小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为 ...

  10. SQL SERVER 之 填充因子

    填充因子依附索引而存在,但创建索引,就意味着要对表进行DML时,必须处理额外的工作量(也就是对索引结构的维护)以及存储方面的IO开销. 所以创建索引时,需要考虑创建索引所带来的查询性能方面的提高,与引 ...