星期四, 十二月 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
相关推荐
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip
动态星空背景个人主页(带后台).zip
scratch少儿编程逻辑思维游戏源码-迷雾森林:诞生 3.2 起源觉醒.zip
lib文件
影剧院音乐厅微信小程序源码,包括资讯动态,演出信息,艺术教育,经典 剧目,商务合作,关于我们,公益演出预约,商业演出预约,演出日历,我的今日预约,我的预约码,后台预约管理,后台预约核销,后台CMS内容管理等功能模块。是一个数字化的艺术殿堂公共平台,无需下载安装,让您能够随时随地便捷地走近乐团、走近交响乐 演出预约管理:开始/截止时间/人数均可灵活设置,可以自定义客户预约 填写的数据项 演出预约凭证:支持线下到场后校验签到/核销/二维码自助签到等多种方式 详尽的演出预约数据:支持预约名单数据导出Excel,打印