导入 mysql 的jar包
jar包:可以直接拿来用,又不想我们看到源代码
 
sql语句 一定注意:当update,delete时 一定注意where 条件,一定要写!!!
public static void add() {
// try catch 捕获异常,try有异常会跳到catch
Connection con = null;
try {
// 1.选择要连接哪一种数据库---JDBC加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建链接(主机名,端口号,用户名,密码)---url包含主机名+端口号+数据库
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
// 3.选择操作的数据库--此动作在上一步的url中集成
// 4.创建命令窗口 写 sql语句
PreparedStatement pstmt = con.prepareStatement("insert into zhuce (name,password,sex,id) value(?,?,?,?)");
pstmt.setString(1, "8888");
pstmt.setString(2, "8888");
pstmt.setString(3, "F");
pstmt.setString(4, "8888");
// 5.运行sql语句 ,查看结果---增删改调用executeUpdate 返回受影响的行数;查询调用 executeQuery
// 返回查询结果集
int result = pstmt.executeUpdate();
System.out.println(result); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main (String[] args){
add();
}

以上是add方法,update和delete方法只是改变了sql语句

update://根据主键查询
PreparedStatement pstmt = con.prepareStatement("update zhuce set sex=?,id=? where name=? and password=?");
pstmt.setString(1, "M");
pstmt.setString(2, "2222");
pstmt.setString(3, "2222");
pstmt.setString(4, "1111"); delete://删除主键
PreparedStatement pstmt = con.prepareStatement("delete from zhuce where name=?and password=?");
pstmt.setString(1, "8888");
pstmt.setString(2, "8888");

JDBC的封装

将1,2步  close  sql语句的输出 进行封装

public class JdbcUtil {
public static Connection getConnection(){
Connection con =null;
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
} public static void close(Connection con){
try {
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static int executeUpdate(String sql,Object[] params){
Connection con = getConnection();
int result =0;
try {
PreparedStatement pstmt = con.prepareStatement(sql);
if(params!=null){
for(int i=0;i<params.length;i++){
pstmt.setObject(i+1, params[i]);
}
}
result = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close(con);
}
return result;
}
}
JAVABEAN
又叫 bean 等
跟数据库里面的表发生映射
package com.neuedu.bean;

import com.sun.org.apache.xml.internal.security.Init;

public class Student {
private Integer sid;
private String sname;
private Integer age;
private Integer sex;
//这四句代码就是javabean
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Student(Integer sid, String sname, Integer age, Integer sex) {
super();
this.sid = sid;
this.sname = sname;
this.age = age;
this.sex = sex;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", age=" + age + ", sex=" + sex + "]";
} }
简化
使用动态数组
//一个方法中只能有一个动态参数
//动态参数必须位于参数列表的最后一个
将之前object[] 改成 动态数组 object...
public static int executeUpdate(String sql,Object... params)

增删改 方法简化

public static int update(Student student){
return JdbcUtil.executeUpdate("update student set sname=?,age=?,sex=? where sid=?",student.getSname(),student.getAge(),student.getSex(),student.getSid());
} public static int add(Student student) {
return JdbcUtil.executeUpdate("insert into student (sid,sname,age,sex) values(?,?,?,?)", student.getSid(),student.getSname(),student.getAge(),student.getSex());
} public static int delete(int id){
return JdbcUtil.executeUpdate("delete from student where sid=?", id);
}
查询不适合用数组,因为不知道有多少数据;用集合,集合有两种  ArrayList,LinkedList
基于ArrayList(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。
用到 游标 的操作:rs.next() ,判断有没有下一行数据,有的话 游标推到下一行,并返回true ;反之 返回false 。 首先从最上面开始
第一次调用rs.next() 就会调用首行的下一行,也就是第一行数据
public static List<Student> getStudents(){
Connection con = null;
List<Student> list = new ArrayList<>();
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/yyy", "root", "123456");
PreparedStatement pstmt = con.prepareStatement("select * from student");
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Student student=new Student();
student.setSid(rs.getInt("sid"));
student.setSname(rs.getString("sname"));
student.setSname(rs.getString("age"));
student.setSname(rs.getString("sex"));
list.add(student);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(con!=null){
con.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
return list;
}
} public static void main (String[] args){
List<Student> students=getStudents();
System.out.println(students);
}

JDBC的链接及封装的更多相关文章

  1. Java JDBC 数据库链接小结随笔

    Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement  和  PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...

  2. 理解class.forName() ---使用jdbc方式链接数据库时会经常看到这句代码

    目录(?)[-] 官方文档 类装载 两种装载方法的区别 不同的类装载器 是否实例化类 在jdbc链接数据库中的应用 资源   原文地址:http://yanwushu.sinaapp.com/clas ...

  3. JDBC工具类—如何封装JDBC

    “获得数据库连接”操作,将在以后的增删改查所有功能中都存在,可以封装工具类JDBCUtils.提供获取连接对象的方法,从而达到代码的重复利用. 该工具类提供方法:public static Conne ...

  4. jdbc工具类的封装,以及表单验证数据提交后台

    在之前已经写过了jdbc的工具类,不过最近学习了新的方法,所以在这里重新写一遍,为后面的javaEE做铺垫: 首先我们要了解javaEE项目中,文件构成,新建一个javaEE项目,在项目中,有一个we ...

  5. JDBC中链接数据库前为什么要用Class.forName(驱动类)加载驱动类?

    使用JDBC链接数据库时,为什么要先使用Class.forName(String name)来加载类? 答: 实际上就是为了加载类时,调用静态初始化块中的注册函数. 可以看一下MySql的Driber ...

  6. Java JDBC数据库链接

    好久没有编写有关数据库应用程序啦,这里回顾一下java JDBC. 1.使用Java JDBC操作数据库一般需要6步: (1)建立JDBC桥接器,加载数据库驱动: (2)连接数据库,获得Connect ...

  7. JDBC连接数据库方法的封装,以及查询数据方法的封装

    (在上一篇文章中,我们详细的介绍了连接数据库的方法,以及eclipse操作数据库信息的相关方法,在这里我们将主要讲封装.) 主要内容: 一般的连接数据库测试 把连接数据库的方法封装成一个类和测试 一个 ...

  8. JDBC 对数据库连接的封装

    1.BaseDao :抽象基类,其中定义了用于打开连接,得到Statement,执行SQL,关闭资源的基础数据库操作方法. 2.I***Dao :操作指定数据表的接口:定义了操作数据表的抽象方法. 3 ...

  9. JDBC创建链接的几种方式

    首先,使用java程序访问数据库的前提 数据库的主机地址(ip地址) 端口 数据库用户名 数据库用户密码 连接的数据库 代码: private static String url = "jd ...

随机推荐

  1. Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动

    Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动 >>>>>>>>>>>>>> ...

  2. 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流

    一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那 ...

  3. 解决无线网络连接出现黄色感叹号---win10

    今天使用公司的电脑,这个电脑是另一位同事用过的,然后到我这里就连不上网了.然后把自己解决的方法记录一下: 开始运行输入以下命令来重置IP. 打开运行输入:cmd 在命令窗口中输入:ipconfig / ...

  4. Haproxy的配置

    1,下载Haproxy 下载Haproxy 1.6  2,安装haproxy uname -r cd /usr/local/src/haproxy-1.6.9/ make TARGET=linux31 ...

  5. 搭建私有Docker Registry

    Docker官方提供了用于搭建私有registry的镜像,并配有详细文档. 官方Registry镜像:https://hub.docker.com/_/registry 官方文档:https://do ...

  6. 移动端和pc端事件绑定方式以及取消浏览器默认样式和取消冒泡

    ### 两种绑定方式 (DOM0)1.obj.onclick = fn; (DOM2)2. ie:obj.attachEvent(事件名称,事件函数); 1.没有捕获(非标准的ie 标准的ie底下有 ...

  7. ORACLE - 用户和角色的权限管理

    在ORACLE中,创建用户后需要授权才能使用. 一.用户管理 1. 用户和角色信息查询 --查询所有用户 SQL> select * from dba_users; --经授予的用户或角色的系统 ...

  8. 使用Modelsim进行简单仿真

    这里记载一下使用modelsim进行简单的仿真,方便以后使用的时候进行查看.所谓的简单的仿真,就是没有IP核.只用图形界面不用tcl脚本进行的仿真.简单的仿真步骤为: 1.改变路径到工作环境下的路径下 ...

  9. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  10. zzuli--2134: 维克兹的进制转换(规律)

    2134: 维克兹的进制转换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 287  Solved: 63SubmitStatusWeb Board D ...