packagecom.project.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Scanner;importjava.sql.CallableStatement;public classJdbcDemo {private static final String url = "jdbc:mysql://localhost:3306/test";private static final String userName = "root";private static final String passWord = "";//初始化驱动,静态代码块
static{try{//加载驱动
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}public static voidmain(String[] args) {
JdbcDemo demo= newJdbcDemo();//创建一个 Connection 连接对象 通过一个连接对象操作数据库,一个连接多个操作
Connection con =JdbcDemo.getcon();//demo.updateprepareDemo(con);
demo.callableDemo(con);
demo.selectDemo(con);
JdbcDemo.closeDemo(con);
}//调用存储过程
public voidcallableDemo(Connection con){//准备SQL
String SQL ="{CALL test(?,?,?,?)}";//创建连接状态
try{
CallableStatement state=con.prepareCall(SQL);//设置参数
state.setString(1, "LIDAHU");
state.setInt(2, 23);
state.setString(3, "man");
state.registerOutParameter(4, java.sql.Types.INTEGER);//执行SQL
state.execute();//处理结果//获取参数
int result = state.getInt(4);if (result==1){
System.out.println("注册成功!");
}else{
System.out.println("注册失败!");
}
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}//利用预编译preparedstatement进行更新操作
public voidupdateprepareDemo(Connection con) {//准备SQL语句//String SQL1 = "INSERT INTO student(id,name,age,sex) VALUES(8,'YANGWU',18,'woman')";//String SQL2 = "DELETE FROM student WHERE id=1";//提交数据库的对象
PreparedStatement state = null;
Scanner sc= newScanner(System.in);
System.out.println("请输入修改的姓名 :");
String name=sc.nextLine();
System.out.println("请输入年龄 : ");int age =sc.nextInt();//关闭自动提交 , 事务不会实现数据持久化,即不会写入到数据库里面
try{
con.setAutoCommit(false);
}catch(SQLException e1) {//TODO Auto-generated catch block
e1.printStackTrace();
}
String SQL3= "UPDATE student SET name=? WHERE age=?";
System.out.println(SQL3);//获取状态
try{
state=con.prepareStatement(SQL3);//设置参数, SQL语句里面的 ? 按照顺序。
state.setString(1, name);
state.setInt(2,age);//executeUpdate 返回一个执行影响行数的int 提交SQL语句,执行SQL
int set =state.executeUpdate();//处理执行结果
if (set > 0) {//结束事务 , 数据上传到数据库, 实现持久化
con.commit();
System.out.println("执行成功: " + set + "行");
}else{//让其回滚。
con.rollback();
}
}catch(SQLException e) {
e.printStackTrace();
}finally{try{
state.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}//更新SQL 操作
@SuppressWarnings("unused")public voidupdateDemo(Connection con) {//准备SQL语句
String SQL1 = "INSERT INTO student(id,name,age,sex) VALUES(8,'YANGWU',18,'woman')";
String SQL2= "DELETE FROM student WHERE id=1";
String SQL3= "UPDATE student SET name='NIHAO' WHERE id = 1";//提交数据库的对象
Statement state = null;try{
state=con.createStatement();//executeUpdate 返回一个执行行数的int
int set =state.executeUpdate(SQL1);
System.out.println(set);if (set > 0) {
System.out.println("执行成功: " + set + "行");
}
}catch(SQLException e) {
e.printStackTrace();
}finally{try{
state.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}//获取连接对象
public staticConnection getcon(){
Connection con= null;try{//获取数据库连接
con =DriverManager.getConnection(url, userName, passWord);
}catch(Exception e) {//TODO: handle exception
}returncon;
}//查询方法
public voidselectDemo(Connection con) {//步骤://创建提交对象,,结果集对象
Statement state = null;
ResultSet set= null;//准备SQL语句
String sql = "select * from student";//执行SQL语句//创建提交数据库的连接
try{//连接对象 ,执行executeQuery查询命令,并保存到结果集set里面
state =con.createStatement();
set=state.executeQuery(sql);//处理结果集(对set 结果集进行遍历操作)//next(); 切换到下一条目标数据,如果存在下一条数据则返回true ,否则返回false
while(set.next()) {//每次循环操作一条结果
int id = set.getInt("id");
String name= set.getString("name");
String sex= set.getString("sex");int age = set.getInt("age");
System.out.println(id+ " " + name + " " + sex + " " + age+ ";");
}
}catch(Exception e) {
e.printStackTrace();
}finally{try{
state.close();
set.close();
}catch(SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}public static voidcloseDemo(Connection con) {//关闭数据库连接//处理异常
try{
con.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}