`
阅读更多

星期四, 十二月 03, 2015 18:46:12

 

八、查询信息实例

 

    由于之前的程序所有的输入内容都是固定的,所以在实际操作中,有很多的可变性就没有被考虑到。

现在要求可以由用户自己输入需要的内容,并通过程序把输入的内容加入到数据库中,

 

8.1通过实例化程序了解控制台输入数据库。

 接下来进行的是当用户自己输入数据时,需要如何将输入的数据保存到数据库中。

 

p463---p475

P466没理解

 

九、与数据库相关的接口

 

  本节介绍PreparedStatement接口,它是Statement接口的一个子接口。

此接口是在实际开发中使用的最广泛的一个操作接口,采用预处理的方式完成。

 

9.1完成增加操作

 由于Statement存在不足,所以在今后的实际程序运行过程中,一般都采用PreparedStatement接口进行操作。

 

9.2运行PreparedStatement接口代替Statement接口进行增加内容操作

 

 

 

9.4完成查询操作

   运行PreparedStatement接口也可以完成查询操作,查询的时候执行同样的sql语句,但如果查询全部的内容,则不需要设置任何的内容。

 

 代码案例:

     运行PreparedStatement接口完成查询操作。

   运行PreparedStatement接口做查询操作要比用Statement接口直接做查询操作更有准确性和可熟悉 。

 

 

9.5 完成模糊查询的操作

    运行模糊查询需要使用LIKE语句,在LIKE语句中则需要使用"%"进行匹配。

 

 代码案例:

      运用PreparedStatement类中的方法进行模糊操作。

   所谓模糊操作,就是指有一定相似程度的值的查询,同搜索关键字进行具有关键值信息的查询类似。

 

 

十、批处理

    批处理(Batch)也称为批处理脚本。

    批处理就是对某对象进行批量的处理。

    批处理文件的扩展名为bat。

    目前比较常见的批处理包含两类:

         DOS批处理:

                

         PS批处理:

                是基于强大的图片编辑软件的photoshop的,用来批处理图片的脚本;

         DOS批处理:

                是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。

    在批处理中,多条sql语句可以一次性执行完毕,称为批处理操作。

       

批处理是在JDBC2.0之后提出的概念,但是在JDBC2.0之中还有很多其他内容。

包括滚动的结果集,并使用结果集更新数据等,但是这些操作基本都不使用

 

   首先在Statement接口上定义一个addBatch()方法,此方法可用于加入批处理,之后使用executeBatch()方法进行批处理的操作。

 

 

10.1代码案例:

         一次性输入数据库多条语句。表示一次性可以处理多条数据库信息内容,以方便进行增加数据的操作。

package day34;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BatchDataTest {
	//驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	//连接地址是由各个数据库生产商单独提供的,所以需要单独记住
	public static final String DBURL = "jdbc:oracle:thin:@10.32.157.42:1521:orcl";
	public static final String DBUSER = "scott";
	public static final String DBPASS = "tiger";
	/*本例是在用户建立过Oracle数据表之后,通过Java程序进行数据库的连接。*/
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		
		Connection conn = null;//表示连接数据库的对象
		PreparedStatement pstmt = null;//表示数据库的更新操作
		
		/*首先需要利用来自Class类中的静态方法forName(),加载需要使用的Driver类。*/
		Class.forName(DBDRIVER);
		/*通过DriverManager类进行数据库的连接。
		 * getConnection(String url, String user, String password) 
		 * 试图建立到给定数据库 URL 的连接。
		 * 返回:到 URL 的连接 */
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		System.out.println(conn);
		
		String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?)";;
		System.out.println("sql  : "+sql);
		pstmt = conn.prepareStatement(sql);//使用预处理的方式创建对象
		for(int i=0;i<10;i++) {
			pstmt.setString(1, "waxun"+i);//第1个?号的内容
			pstmt.setInt(2,20+i);
			pstmt.setDate(3,new java.sql.Date(new java.util.Date().getTime()));
			pstmt.setFloat(4,900*i);
			pstmt.addBatch();//增加批处理
		}
			//执行sql,更新数据库
			int[] a = pstmt.executeBatch();
			System.out.print(a.length);
			//关闭数据库
			pstmt.close();
			conn.close();
	}
}


运行结果:
oracle.jdbc.driver.T4CConnection@b64078
sql  : INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?)
10
在数据库中查询数据

插入数据之前:
   PID NAME
------ -------
     2 宇宙
插入数据之后:
PID NAME
--- ------
  2 宇宙
 41 waxun0
 42 waxun1
 43 waxun2
 44 waxun3
 45 waxun4
 46 waxun5
 47 waxun6
 48 waxun7
 49 waxun8
 50 waxun9

 十一:事务处理

  

  10.1基本概念

   

    a.Oracle数据库支持事务处理,可以通过commit提交事务,通过rollback回滚事务。

这两种手段是进行事务处理的首要手段。

    在JDBC中也同样支持事务处理,但所有的事务处理都需要依靠Connection完成。

否则在事务处理的过程中,会造成在错误之前的代码运行了,而错误之后的代码没有运行的情况,

这在实际开发过程中是不允许出现的,否则会造成很大的损失。

 

   b.在Connection操作中所有的数据库更新属于立即更新,如果想要进行事务的操作,

则首先应该停止自动更新操作,之后所有的更新则通过commit()进行提交,如果有问题则回滚。

 

  10.2通过commit()方法提交事务

  conn.setAutoCommit(false);

stmt = conn.createStatement();

代码案例:
 package day34;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class TransactionDemo {
	
	//驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	//连接地址是由各个数据库生产商单独提供的,所以需要单独记住
	public static final String DBURL = "jdbc:oracle:thin:@10.32.157.42:1521:orcl";
	public static final String DBUSER = "scott";
	public static final String DBPASS = "tiger";
	/*本例是在用户建立过Oracle数据表之后,通过Java程序进行数据库的连接。*/
	public static void main(String[] args) throws SQLException, ClassNotFoundException{
		
		Connection conn = null;//表示连接数据库的对象
		Statement stt = null;//表示数据库的操作
		/*首先需要利用来自Class类中的静态方法forName(),加载需要使用的Driver类。
		 * 1.使用Class类加载驱动程序*/
		Class.forName(DBDRIVER);
		/*通过DriverManager类进行数据库的连接。
		 * getConnection(String url, String user, String password) 
		 * 试图建立到给定数据库 URL 的连接。
		 * 返回:到 URL 的连接 */
		
		/*2.连接数据库*/
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		System.out.println(conn);
		 
		conn.setAutoCommit(false);//取消自动提交
		/*3.Statement接口需要通过Connection接口进行实例化操作*/
		stt = conn.createStatement();
		try {
			stt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'宇宙a',21,TO_DATE('1992-02-14','yyyy-mm-dd'),9999.0)");
			stt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'宇宙b',22,TO_DATE('1992-02-14','yyyy-mm-dd'),9999.0)");
			stt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'宇宙c',30,TO_DATE('1992-02-14','yyyy-mm-dd'),9999.0)");
		    int b[] = stt.executeBatch();
		    System.out.println(b.length);
		    conn.commit();//进行提交
		} catch (Exception e) {
			// TODO Auto-generated catch block
			conn.rollback();
			e.printStackTrace();
		}
		stt.close();
		conn.close();
	}
}


运行结果:
oracle.jdbc.driver.T4CConnection@1461c98
3
数据库:

PID NAME
--- -----
  2 宇宙
 41 waxun
 42 waxun
 43 waxun
 44 waxun
 45 waxun
 46 waxun
 47 waxun
 48 waxun
 49 waxun
 50 waxun

PID NAME
--- -----
 51 宇宙a
 52 宇宙b
 53 宇宙c

 去掉一个插入的值,应该是执行回滚,都不执行。

执行结果:

oracle.jdbc.driver.T4CConnection@1461c98
java.sql.BatchUpdateException: 批处理中出现错误: ORA-00947: 没足够的值

	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:414)
	at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:454)
	at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:3956)
	at day34.TransactionDemo.main(TransactionDemo.java:40)

数据库中:
没错的insert语句也没有被插入。

 注意:

    1.进行取消自动更新处理。

      否则在实际操作过程中,如果遇见错误则可能造成错误之前语句执行了,而错误之后未执行的情况。

    2.对提交的sql语句进行试验操作,如果在提交的sql语句中出现错误,则进行回滚,此时sql语句不会进行提交。

      如果没有出现错误,则再进行提交操作。

   

 

十二、MySql数据库

  12.1MySql已被sun收购。

 

安装:

    MySql数据库的默认端口号事3306

    选择数据库的编码为gbk,否则程序在读取时会出现乱码问题

 

12.2MySql数据库的基本命令

    在MySql的基本操作命令中除了一些特殊的之外,其他的都是标准的sql。

 

  root/root

 

2.查看全部的数据库

show databases;

3.创建数据库

create database orcl;

4.使用数据库

use orcl;

5.查看全部的表

show tables;

6.创建一张表,其中id可以自动增长

 

CREATE TABLE person(

    pid INT AUTO_INCREMENT PRIMARY KEY NOT NULL,

    name VARCHAR(50) NOT NULL,

    age INT NOT NULL,

    birthday DATE NOT NULL,

    salary FLOAT NOT NULL

);

 

7.查看数据表结构

desc 表名称

 

8.插入数据

insert into person(name,age,birthday,salary) values('waxuna','24','1992-01-01',9000.0);

 

9.查询表中的数据

select * from person;

 

 

12.2使用MySql数据库

    直接配置驱动程序,但MySql驱动程序需要从网上单独下载。

 

//驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中

public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

//连接地址是由各个数据库生产商单独提供的,所有需要单独记住

public static final String DBURL = "jdbc:mysql://localhost:3306/orcl";

//连接数据库的用户名/密码

public static final String DBUSER = "root";

public static final String DBPASS = "root";

 

12.3代码案例:

 

package day34;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

 

 

public class MySqlConDemo {

//驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中

public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";

//连接地址是由各个数据库生产商单独提供的,所需要单独记住

public static final String DBURL = "jdbc:mysql://localhost:3306/orcl";

//连接数据库的用户名/密码

public static final String DBUSER = "root";

public static final String DBPASS = "root";

public static void main(String[] args) throws ParseException, SQLException, ClassNotFoundException{

 

Connection conn = null;//表示数据库的连接对象

PreparedStatement pstmt = null;//表示数据库的更新操作 

String name  = "yuzhoua";

int age = 18;

 

Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1992-09-08");

float salary = 9000.0f;

String sql = "insert into person(name,age,birthday,salary) values(?,?,?,?);";

System.out.println(sql);

 

Class.forName(DBDRIVER);//1.使用Class类加载驱动程序

conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//2.连接数据库

//3.PreparedStatement接口需要通过Connection接口进行实例化操作

pstmt = conn.prepareStatement(sql);//使用预处理的方式创建对象

 

pstmt.setString(1,name);

pstmt.setInt(2, age);

pstmt.setDate(3, new java.sql.Date(date.getTime()));

pstmt.setFloat(4,salary);

//执行SQL

pstmt.executeUpdate();

//关闭数据库

pstmt.close();

conn.close();

}

}

 

运行结果:

insert into person(name,age,birthday,salary) values(?,?,?,?);

 

查询数据库中的数据,已增加

 

星期五, 十二月 04, 2015 19:07:36

0
1
分享到:
评论

相关推荐

    Day22-JDBC初识_jdbc_java_knowyv3_

    jdbc初识、1. 确定连接的数据库是哪一个? MySQL 2. 确定连接的数据库是在哪一个主机上, 数据库服务器的地址 3. 连接当前数据库的用户名 4. 对应用户名的密码

    传智播客黑马35期

    day32_struts2编码实战 day33_hibernate01 day34_hibernate02 day35_hibernate03 day36_hibernate04 day37_spring01 day38_spring02 day39_spring03 day40_巩固知识之SSH编码实战演练 day41_巩固知识之...

    Jdbc_Day01.zip_jdbc

    JDBC连接数据库,超简单,源代码加注释,方便学习java连接数据库

    day06_JDBC连接池&JDBCTemplate2

    1.2.2视频详情1.2.3总结与补充 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事 1.2.4课堂提问与练习 1、什么是JDBC 1.2.5习

    day01_eesy_01mybatis.zip

    2.三层架构 表现层: 是用于展示数据的 业务层: 是处理业务需求的 持久层: 是和数据库交互的 3.持久层的技术解决方案 JDBC技术: Connection PreparedStatement ResultSet Spring的JdbcTemplate...

    day06_JDBC连接池&JDBCTemplate_docx1

    1. 导入驱 1.复 2.右键 2. 注 3. 获取 5. 获取 6. 执行 7. 处理结 8. 释放资 1. 注 1. 功能: 1. 获取 2. 管理事务:

    jdbc笔记(自写)

    Day1–JDBC概述+JDBC完成CRUD+DAO设计 1.JDBC概述 1.1 什么是持久化(persistence): 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。 ​ 保存数据: ​ 内存中: 掉电之后,数据就没了. ​ 磁盘...

    day_45_bookstore.rar

    本Java视频教程案例是尚硅谷JavaWEB学习完成后的一个总结性案例,由讲师在第45、46、47天带领学员一起完成。 该案例把 JavaWEB 之前学习的大部分技术融合到一起,具体内容涉及:JavaSE、SQL、JDBC、DBUtils、C3P0、...

    day14_结构化数据库代码_以mysql为例_包含db.properties,JdbcUtils.java等

    结构化数据库代码_以mysql为例_包含db.properties,JdbcUtils.java等。若要更改数据库,比如有mysql改为oracle,只需更改db.properties即可。

    JAVA WEB学习课件及代码详解第二部分

    JAVA的J2EE WEB学习资料,其中包括了学习视频、讲义、笔记、以及练习代码等,适合刚接触JAVA同时需要搭建WEB平台的同学使用。...2、day06_JDBC连接池&JDBCTemplate 3、day07_HTML 4、day08_HTML&CSS

    传智博客jdbc学习案例

    package cn.itcast.jdbc.dao; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Properties; /** * * 2008-12-6 * * @author ...

    tarena达内大部分笔记(xml,struts,spring,hibernate,oracle,jsp,jdbc,corejava,servlet)

    │ └─spring-day2PM │ ├─exec │ ├─aop3 │ ├─aop2 │ └─aop1 ├─servlets ├─oracle ├─ooad ├─jsp ├─jdbc ├─java │ └─corejava │ ├─io │ │ └─FileCopy │ ├─day9 │ ├─day8 │ ...

    java视频教程Day01 免费

    32. Java Standard Tag Library (标准标签库) 33. Expression Language(表达式语言) 34. Expression Language(表达式语言) 35. 使用Java WEB技术编写网页QQ J2EE 框架部分 36. Eclipse工具使用 37. ...

    MySQL练习JDBCDemo8.zip

    在JavaWeb\day04\src\cn\itcast\jdbc\JDBCDemo8.java中运行,注意改成自己的数据库

    jsp+servlet+javabean+jdbc+mysql实现增删改查和分页功能

    2.开发中的一些小技巧。 3.客户管理平台功能 * 添加客户 * 查询所有的客户的信息 * 修改客户信息 * 删除客户信息 * 按条件查询 * 分页查询数据 4.准备环境 5.Servlet + JSP +JavaBean + JDBC(DBUtils)+ ...

    Java学习日志(三十三): JDBC预处理对象,连接池C3P0

    Java学习日志(三十三)JDBC预处理对象登陆注册案例模拟:用户注入攻击数据库解决用户注入式攻击PreparedStatement对象对数据库表进行增删改查连接池连接池的原理连接池的规范接口DataSource创建并测试C3P0连接池的...

    JDBC笔记.docx

    private String url = "jdbc:mysql://localhost:3306/day15"; //数据库用户名 private String user = "root"; //数据库密码 private String password = "root"; @Test public void demo() throws Exception{...

    day08_LoginDemo.zip

    本案例是Tomcat+Servlet+JDBC的一个小的案例,通过学习登录的逻辑来熟悉知识点。本案例是Tomcat+Servlet+JDBC的一个小的案例,通过学习登录的逻辑来熟悉知识点。

    Credit-card-management-system-JDBC-Java-SQL:该项目使用Java和数据访问对象(DAO)来实现特定的系统要求

    信用卡管理系统JDBC Java SQL 该项目使用JDBC(Java和MySQL)来实现信用卡系统管理要求。 由于隐私原因,不包含sql数据库创建文件。 为了成功运行该项目,您需要: 1. The SQL database file&#40; contact me if you...

    整理后java开发全套达内学习笔记(含练习)

    int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字) float 32bit, 9位有效数字,含小数(四舍五入)(小数点算一位,正负号不算) double 64bit, 18位...

Global site tag (gtag.js) - Google Analytics