jdbc入门理解-学习javaweb必看

 

JDBC( DataBase Connectivity,数据库链接),提供了一系列平台无关的关于执行SQL语句的标准 API,可以方便地实现多种关系型数据库的统一操作,有一组由语言编写的类和接口组成;
在实际开发中,可以使用JDBC进行各个数据库的链接与操作,而且可以方便向数据库中发送各种SQL命令,在JDBC中提供的是一套标准的接口,各个支持的数据库生产商只要按此接口提供相应的驱动实现,就可以使用JDBC操作,最大地体现了JAVA的可移植性设计思想!
JDBC驱动分类:
1.JDBC-ODBC桥驱动:ODBC是开发式数据库连接平台,是微软Windows的服务,这个驱动是JDBC通过ODBC进行数据库连接操作,但性能较低,开发中不会使用这种方式!
程序—>JDBC—>ODBC—->数据库;        // 有SUN来维护,但不使用开发
2.JDBC本地驱动:
表示各个数据库厂商根据JDBC提供的接口进行开发各自数据库平台的支持JDBC的驱动程序,在java开发中使用此种驱动可以获得较高的性能,但丧失了程序在各数据库平台上的可移植性!
程序—>JDBC—->数据库;
3.JDBC网络驱动:将JDBC转换为与DBMS无关的网络协议,这种协议有可被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯java客户机链接到多种不同的数据库上。所用的具体协议取决于提供者,这是最为灵活的JDBC驱动程序;// 是DBA的任务!
4.本地协议纯JDBC驱动:
将JDBC调用直接转换为DBMS所使用的网络协议,这样客户端就可以直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法!
// 数据库操作的过程:
1.打开数据库服务;
2.连接数据库,可能需要输入用户名、密码;
3.操作数据库,创建表,查询表,更新记录;
4.关闭链接,事务提交;
// 涉及到的类与接口:

1.public class DriverManager

extends Object; // 取得数据库连接

2.public interface Connection

extends Wrapper;// 其对象表示当前的数据库连接;

3.数据库的操作:

public interface Statement

extends Wrapper;// 执行静态的sql语句并返回结果!

public interface PreparedStatement

extends Statement;// 预的sql语句对象,表示一组sql操作,可以多次使用!

4.数据库的查询:

public interface ResultSet

extends Wrapper;// 表示查询数据库返回的结果集;

5.

public class Date

extends Date;// 表示日期,java.util.Date的子类;

6.public interface CallableStatement

extends PreparedStatement; // 执行数据库存储涉及到的步骤!

7.public interface DatabaseMetaData

extends Wrapper;// 数据库的概要信息:厂商等!

———SQL:结构化查询语言:
分三类:1.DML,数据库操作语言,检索或修改数据;
2.DDL,数据库定义语言,定义数据结构,如创建、修改或删除数据库对象;
3.DCL,数据库控制语言,定义数据库用户的权限;
// increment

drop table student;

create table student(

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(20) NOT NULL,

age INT NOT NULL,

sex VARCHAR(2) DEFAULT ‘男',

birthday DATE

);

insert into student(name, age, sex, birthday) values(‘王敏', 20, ‘女', 20090105);

—————–连接数据库:

package com.mldn;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.SQLException;

public class JdbcMysql

{

// 定义JDBC连接驱动(JDBC厂商驱动)

// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar

public static final String DRIVER = “com..jdbc.Driver”;

// 定义数据源URL:数据库地址

public static final String DBURL = “jdbc:://localhost:3306/school?characterEncoding=utf8”;

// 定义数据库登录的用户名:

public static final String USERNAME = “root”;

// 定义数据库登录的密码:

public static final String PASSWORD = “123456”;

public static void main(String[] args)

{

Connection conn = null; // 数据库连接

Statement stmt = null; // 数据库会话

ResultSet rs = null; // 查询结果集

try

{

try

{

Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动

conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话

/*String insert = “INSERT INTO student(name, age, sex, birthday) VALUES(‘Jim', 29, ‘男', 19900628)”;// 插入

String update = “update student set age = 31 where id = 2”; // sql更新

String delete = “delete from student where id = 18”; // 删除一行*/

String sql = “select * from student”; // sql语句

rs = stmt.executeQuery(sql); // 执行查询并返回

while (rs.next()) // 输出ResultSet

{

System.out.print(rs.getString(1) + ” “); // 获取字段1

System.out.print(rs.getString(2) + ” “);

System.out.print(rs.getString(3) + ” “);

System.out.print(rs.getString(4) + ” “);

System.out.print(rs.getString(5) + “\n”);

}

}

finally

{

rs.close(); // 关闭读取

stmt.close(); // 关闭会话

conn.close(); // 关闭连接

}

}

catch (ClassNotFoundException e)

{

e.printStackTrace(); // 加载驱动时找不到驱动class文件

}

catch (SQLException e)

{

e.printStackTrace(); // sql异常

}

}

}

/*

ubuntu@xu-desktop:~$ javac -d . work/JdbcMysql.java

ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql

1 王敏 20 女 2009-01-05

3 王方 24 女 2009-01-05

4 李林 23 女 2009-01-05

5 张速 21 男 2009-01-05

6 赵凌 25 女 2009-01-05

7 扬名 25 女 2009-01-05

8 徐鸣 22 男 1986-01-05

9 王菲 23 女 1985-01-05

10 高峰 22 男 1984-01-05

11 孙值 21 女 1983-01-05

12 蔡瑁 24 女 1988-01-05

*/

———–数据库连接地址的形式:
有三部分组成:
1.jdbc协议:JDBC URL中的协议总是 “jdbc:”;
2.子协议:驱动程序名或数据库链接机制(这种机制由一个或多个驱动程序支持)的名称,如::
3.子名称:一种标识数据库的方法。必须遵循“//主机名:端口号/子协议”的标准URL命名约定,
如://localhost:3306/school. // school 表示数据库名;

———–实现数据库的插入、更新、删除、查询:

package com.mldn;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.SQLException;

import java.util.Scanner;

public class JdbcMysql

{

// 定义JDBC连接驱动(JDBC厂商驱动)

// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar

public static final String DRIVER = “com.mysql.jdbc.Driver”;

// 定义数据源URL:数据库地址

public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;

// 定义数据库登录的用户名:

public static final String USERNAME = “root”;

// 定义数据库登录的密码:

public static final String PASSWORD = “123456”;

public static void main(String[] args)

{

Connection conn = null; // 数据库连接

Statement stmt = null; // 数据库会话

ResultSet rs = null; // 查询结果集

try

{

try

{

Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动

conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话

Scanner in = new Scanner(System.in); // 接收用户输入

System.out.println(“请输入更新操作:”);

if (in.hasNextLine())

{

int status = 0;

status = stmt.executeUpdate(in.nextLine()); // 执行用户sql操作

if (status != 0)

{

System.out.println(“操作成功!”);

}

else

{

System.out.println(“操作失败,可能是语法错误,或者操作对象不存在!”);

}

}

System.out.println(“输入查询操作:”);

rs = stmt.executeQuery(in.nextLine()); // 执行查询并返回结果

while (rs.next()) // 输出ResultSet

{

System.out.print(rs.getString(1) + ” “); // 获取字段1

System.out.print(rs.getString(2) + ” “);

System.out.print(rs.getString(3) + ” “);

System.out.print(rs.getString(4) + ” “);

System.out.print(rs.getString(5) + “\n”);

}

}

finally

{

rs.close(); // 关闭读取

stmt.close(); // 关闭会话

conn.close(); // 关闭连接

}

}

catch (ClassNotFoundException e)

{

e.printStackTrace(); // 加载驱动时找不到驱动class文件

}

catch (SQLException e)

{

e.printStackTrace(); // sql异常

}

}

}

/*

ubuntu@xu-desktop:~$ javac -d . work/JdbcMysql.java

ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql

请输入更新操作:

delete from student where id = 20

操作成功!

输入查询操作:

select * from student;

1 王敏 20 女 2009-01-05

14 梨花 23 女 1991-02-08

3 王方 31 女 2009-01-05

4 李林 23 女 2009-01-05

5 张速 21 男 2009-01-05

6 赵凌 25 女 2009-01-05

7 扬名 25 女 2009-01-05

8 徐鸣 22 男 1986-01-05

9 王菲 23 女 1985-01-05

10 高峰 22 男 1984-01-05

11 孙值 21 女 1983-01-05

12 蔡瑁 24 女 1988-01-05

15 Jim 29 男 1990-06-28

16 Jim 29 男 1990-06-28

17 Jim 29 男 1990-06-28

*/

———执行数据库查询、删除、插入、更新:

package com.mldn;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.sql.SQLException;

import java.util.Scanner;

public class JdbcMysql

{

// 定义JDBC连接驱动(JDBC厂商驱动)

// 将寻找/usr/share/lib/jvm/sun-jdk-6/jre/lib/ext/*.jar

public static final String DRIVER = “com.mysql.jdbc.Driver”;

// 定义数据源URL:数据库地址

public static final String DBURL = “jdbc:mysql://localhost:3306/school?characterEncoding=utf8”;

// 定义数据库登录的用户名:

public static final String USERNAME = “root”;

// 定义数据库登录的密码:

public static final String PASSWORD = “123456”;

public static void main(String[] args)

{

Connection conn = null; // 数据库连接

Statement stmt = null; // 数据库会话

int status = 0; // 更新状态

try

{

try

{

Class.forName(DRIVER);//.newInstance(); // 加载数据库驱动

conn = DriverManager.getConnection(DBURL, USERNAME, PASSWORD); // 获取数据库链接

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); // 创建会话

Scanner in = new Scanner(System.in); // 接收用户输入;

in.useDelimiter(“\n”);

System.out.println(“请输入更新操作:”);

String sql = null;

while (in.hasNextLine())

{

System.out.println(“执行!!!”);

sql = in.nextLine();

System.out.println(sql);

if (sql.trim().matches(“^.+\\S+.+$”)) // 输入不能全是空格!

{

break;

}

else

{

System.out.println(“请输入更新操作:”);

}

}

status = stmt.executeUpdate(sql); // 执行用户sql操作

}

finally

{

if (conn == null)

{

System.out.println(“驱动加载失败,查看类路径配置!”);

return; // 退出程序

}

if (stmt == null)

{

System.out.println(“创建会话失败!”);

conn.close();

return; // exit

}

if (status > 0)

{

System.out.println(“更新成功!”);

}

else

{

System.out.println(“更新出错:数据源不存在或者语法错误!”);

stmt.close();

conn.close();

return;

}

query(stmt); // 输出表

stmt.close(); // 关闭会话

conn.close(); // 关闭连接

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

public static void query(Statement stmt) throws Exception

{

ResultSet rs = stmt.executeQuery(“select * from student”); // 执行查询并返回结果

while (rs.next()) // 输出ResultSet

{

/*System.out.print(rs.getString(1) + ” “); // 获取字段1

System.out.print(rs.getString(2) + ” “);

System.out.print(rs.getString(3) + ” “);

System.out.print(rs.getString(4) + ” “);

System.out.print(rs.getString(5) + “\n”);*/

int id = rs.getInt(“id”);

String name = rs.getString(“name”);

int age = rs.getInt(3);

String sex = rs.getString(“sex”);

java.util.Date date = rs.getDate(5);

System.out.print(“id:” + id + ” “);

System.out.print(“姓名:” + name + ” “);

System.out.print(“年龄:” + age + ” “);

System.out.print(“性别:” + sex + ” “);

System.out.print(“生日:” + date + “\n”);

}

}

}

/*

ubuntu@xu-desktop:~$ java com.mldn.JdbcMysql

请输入更新操作:

insert into student(name, age) values(‘wangli', 33);

执行!!!

insert into student(name, age) values(‘wangli', 33);

更新成功!

id:1 姓名:王敏 年龄:20 性别:女 生日:2009-01-05

id:14 姓名:梨花 年龄:23 性别:女 生日:1991-02-08

id:3 姓名:王方 年龄:31 性别:女 生日:2009-01-05

id:4 姓名:李林 年龄:23 性别:女 生日:2009-01-05

id:5 姓名:张速 年龄:21 性别:男 生日:2009-01-05

id:6 姓名:赵凌 年龄:25 性别:女 生日:2009-01-05

id:7 姓名:扬名 年龄:25 性别:女 生日:2009-01-05

id:8 姓名:徐鸣 年龄:22 性别:男 生日:1986-01-05

id:9 姓名:王菲 年龄:23 性别:女 生日:1985-01-05

id:10 姓名:高峰 年龄:22 性别:男 生日:1984-01-05

id:11 姓名:孙值 年龄:21 性别:女 生日:1983-01-05

id:12 姓名:蔡瑁 年龄:24 性别:女 生日:1988-01-05

id:15 姓名:Jim 年龄:29 性别:男 生日:1990-06-28

id:21 姓名:ll 年龄:20 性别:男 生日:null

id:17 姓名:Jim 年龄:29 性别:男 生日:1990-06-28

id:22 姓名:zhangsan 年龄:29 性别:男 生日:null

id:23 姓名:wangli 年龄:33 性别:男 生日:null

*/

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《jdbc入门理解-学习javaweb必看
本文地址:https://www.zhiletu.com/archives-152.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏


下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微