java数据库编程技术(JDBC)个人笔记



JDBC是数据库连接(java DataBase Connectivity)技术简称, 他可以把数据持久保存,这就是一种持久化机制
持久化。持久化是将程序中的数据在瞬时状态和持久状态间转化的机制,就是瞬时数据(如内存中的数据,是否能永久保存)持久化为持久数据(如持久化至数据库所在磁盘中,能够长久保存)。
JDBC API:
JDBC API主要做三件事:与数据库建立连接,发送SQL语句,处理结果
其工作过程为:
DriverManager类:装载驱动程序,并为创建新的数据库连接提供支持。
Class.forName("com.mysql.jdbc.Driver");
Connection接口:负责连接数据库并担任传送数据任务。
connection con=DiverManager.getconnection(jdbc:"数据库名"://本机端口(localhost:3306)|| 本机IP(172.0.0.1)/库名,"数据库用户名(root)","数据库密码(ok)");
会出现异常 try catch即可;
Statment接口:由connection产生,负责执行语句 
Statment st=con.createStatment();
ResultSet接口:负责保存和处理Stament执行和产出的结果;
ResultSet rs=st.executeQuery("数据库语句(如SELECT * FROM 库名)")
数据处理
while(rs.next()) rs.getString(第一列(1));
*最后从下往上关闭
rs.close();
st.close();
con.close()
PreparedStatment接口:Statment的子接口,它由connection产生,同样负责执行Sql语句。与Statment接口相比,它具有高安全性、高性能、
高可读性和高可维护性优点。
PreparedStatement pst=conn.prepareStatement(sql);
使用Preparedstatment操作数据库的三个不走:
创建PreparedStatment对象 -->设置每个输入参数的值-->执行SQL语句
设置每个输入参数的值:
通过调用setXxx()方法来完成,其中。Xxx是与该参数相应类型。列如,弱参数是String类型,则使用犯法就是setString().setXxx()方法的第一个参数是设置参数的序数位置从1开始计数;
执行SQL语句:
在设置了各个输入参数的值后,就可以调用PreaparedStatment接口的三个执行方法[ResultSet executeQuery()、int executeUpdate()、boolean execut()]之一来执行sql语句
注意,这单个执行方法和Statment接口中的三个方法相同、作用相同,但是不需要sql语句做参数,SQL语句已经杂创建对象Preparedstatment时指定了
JDBC访问数据库步骤:
加载数据库--->与数据库建立连接--->发送SQL语句,并得到返回结果-->处理返回结果

自我代码实现展示:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Test1 {
/**
* 测试运行
* @param args
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Test1 t=new Test1();
Scanner input=new Scanner(System.in);
/*t.sava("Html基础",40,4);
System.out.println("写入成功");
Test1 t1=new Test1();
t1.sel();*/
//t.update(15, "mysql数据库", 40);
}
/**
* 删除数据库中信息
* PreparedStatement用法(表达数据的安全性)
* pst.setString(占位符,编号)
* pst.executeUpdate()更新作用 相当于写入数据库
* 用完从下往上关闭 close();
* @param uid 要删除的id
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void delete(String uid) throws ClassNotFoundException, SQLException{
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//获取数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://172.0.0.1/myschool", "root","ok");
String str="delete from student where studentno=?";
PreparedStatement pst=conn.prepareStatement(str);
pst.setString(1, uid);
int num=pst.executeUpdate();
System.out.println(num+"影响的行数");
pst.close();
conn.close();
}
/**
* 注入sql方式2
* @param name 显示用户名
* @param password 显示密码
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void login2(String name,String password) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://172.0.0.1/myschool","root", "ok");
String str="select * from student where studentno=? and longinpwd=?";
PreparedStatement past=conn.prepareStatement(str);
past.setString(1, name);
past.setString(2, password);
ResultSet st=past.executeQuery();
if(st.next()){
       System.out.println(st.getString(3)+"\t");
       System.out.println(st.getString(7)+"\t"); 
}
st.close();
past.close();
conn.close();
}
/**
 * 注入sql
 * @param name 显示用户名
 * @param password 显示密码
 * @throws ClassNotFoundException
 * @throws SQLException
 */
public static void login(String name,String password) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://172.0.0.1/myschool", "root", "ok");
Statement st=conn.createStatement();
String str="select * from student where studentno"+name+"and loginpwd="+password+"";
ResultSet rs=st.executeQuery(str);
if(rs.next()){
System.out.println(rs.getString("studentname")+"\t");
System.out.println(rs.getString("address")+"\t");
}
rs.close();
st.close();
conn.close();
}
/**
 * 修改数据库信息
 * @param id 修改的编号(与数据库中对应)
 * @param name 修改的名字
 * @param hour 修改的学时
 * @throws ClassNotFoundException
 * @throws SQLException
 * 所改数据必须与数据库一致
 */
public void update(int id,String name,int hour) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/myschool", "root", "ok");
Statement st=conn.createStatement();
String str="update subject set subjectname='"+name+"',classhour="+hour+" where subjectid="+id;
System.out.println(str);
st.executeUpdate(str);
st.close();
conn.close();
}

/**
 * 增加数据库subject的数据
 * @param name 要更改的名称
 * @param hour  要更改的学时
 * @param id    要更改的编号
 * @throws ClassNotFoundException 加载抛出的异常
 * @throws SQLException 获取数据库连接抛出的异常
 * 设置与数据库中相符的行
 */
public static void sava(String name,int hour,int id) throws ClassNotFoundException, SQLException{
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//获取数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/myschool", "root", "ok");
//创建执行sql对象
Statement st=conn.createStatement();
//写入数据库
StringBuffer str=new StringBuffer();
str.append("insert into subject values (null,'" + name + "'," + hour
+ "," +id + ")");
//完成增删改
st.executeUpdate(str.toString());
st.close();
conn.close();
}
/**
* 数据库的全部查询 
* 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver");
* 获取数据库连接  Connection conn=DiverManager.getconnection("jdbc:mysql://(本机接口加库名)","用户名","密码")
* 创建执行sql对象 statment st=conn.createStatment();
* 执行sql并返回结果 ResultSet rs=st.executeQuery("查询语句")
* 处理数据 遍历向下查找 .next()
* 关闭链接    从下往上close()
* @throws ClassNotFoundException
* @throws SQLException
*/

public static void sel() throws ClassNotFoundException, SQLException {
//加载数据库驱动
  Class.forName("com.mysql.jdbc.Driver");
  //获取数据库连接
  Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/myschool","root","ok");
  //创建执行sql对象
  Statement st=conn.createStatement();
  //执行sql并返回结果
  ResultSet rs=st.executeQuery("select*from subject");
  //处理数据
  while(rs.next()){
  System.out.print(rs.getInt(1)+"\t");
  System.out.print(rs.getString("subjectname")+"\t");
  System.out.println(rs.getInt(3));
  
  }
  //关闭连接
  rs.close();
  st.close();
  conn.close();
  
  

}

}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值