数据库管理系统源码
㈠ “源码分享”ASP.NET仓库进销存ERP管理系统+小程序源码
开发环境为Visual Studio 2012,数据库为sql SERVER2012R2,使用.net 4.5开发。
一、源码介绍
所有行业的ERP系统/进销存/仓库系统,该系统为vs2012 .net+MsSQL版,目前标准版功能简单、明了、满足公司正常使用,已有多家企业正常使用,成熟稳定,有需要的可以下载看看。
二、主要功能
1、电商管理(可以和公众号、小程序对接) 微信订单、小程序订单、公众号订单
参数设置:轮播图片设置、分类导航设置、小程序参数设置、公众号参数设置
2、销售管理:销售订单、销售出库
3、采购管理:采购订单、采购入库
4、生产管理:BOM分组、BOM清单、生产计划、生产领料、生产入库
5、仓库管理:其他入库、其他出库、商品组装、商品拆卸、库存盘点、库存调拨
6、财务管理:销售收款、其他收款、采购付款、其他付款、收款核销、付款核销
7、采购报表
采购订单跟踪表 采购明细表 采购汇总表(按商品) 采购汇总表(按供应商)
8、销售报表
销售订单跟踪表 销售明细表 销售汇总表(按商品) 销售汇总表(按客户)
9、生产报表
生产计划跟踪表 生产领料明细表 生产领料汇总表 生产入库明细表 生产入库汇总表
10、仓存报表
商品库存余额表 商品收发明细表 商品收发汇总表
11、资金报表
现金银行报表 应付账款明细表 应收账款明细表
客户对账单 供应商对账单 其他收支明细
12、基础资料
供应商管理 商品管理 仓库管理 账户管理 员工管理 企业号通讯录
工序管理 辅助资料 客户类别 供应商类别 商品类别 商品品牌
收支类别 计量单位 结算方式 工序类别 高级设置 操作日志
参数设置 打印设置 Logo印章
3、默认数据库连接字符串在web.config配置文件中修改
获取源码方式:点赞+转发+关注+私信【进销存ERP】
******************************************************************************
欢迎点赞+转发+关注!大家的支持是我分享最大的动力!!!
******************************************************************************
㈡ 急求java学生信息管理系统源代码,带有连接数据库的,万分感谢
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
public class MainFrame extends JFrame implements ActionListener{
InsertPanel ip = null;
SelectPanel sp = null;
JPanel pframe;
JButton jb1,jb2,jb3;
JMenuItem jm11,jm21,jm22,jm23,jm31,jm32,jm41,jm42;
CardLayout clayout;
public MainFrame(String s){
super(s);
JMenuBar mb = new JMenuBar();
this.setJMenuBar(mb);
JMenu m1 = new JMenu("系统");
JMenu m2 = new JMenu("基本信息");
JMenu m3 = new JMenu("成绩");
JMenu m4 = new JMenu("奖惩");
mb.add(m1);
mb.add(m2);
mb.add(m3);
mb.add(m4);
jm11 = new JMenuItem("退出系统");
jm21 = new JMenuItem("输入");
jm22 = new JMenuItem("查询");
jm23 = new JMenuItem("更改");
jm31 = new JMenuItem("输入成绩");
jm32 = new JMenuItem("查询成绩");
jm41 = new JMenuItem("奖励");
jm42 = new JMenuItem("处分");
m1.add(jm11);
m2.add(jm21);
m2.add(jm22);
m2.add(jm23);
m3.add(jm31);
m3.add(jm32);
m4.add(jm41);
m4.add(jm42);
Icon i1 = new ImageIcon();
Icon i2 = new ImageIcon();
Icon i3 = new ImageIcon();
jb1 = new JButton(i1);
jb1.setToolTipText("输入");
jb2 = new JButton(i2);
jb2.setToolTipText("查询");
jb3 = new JButton(i3);
jb3.setToolTipText("退出");
JToolBar tb = new JToolBar("系统工具");
tb.add(jb1);
tb.add(jb2);
tb.add(jb3);
add(tb,BorderLayout.NORTH);
jm11.addActionListener(this);
jm21.addActionListener(this);
jm22.addActionListener(this);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
clayout = new CardLayout();
pframe = new JPanel(clayout);
add(pframe);
JPanel mainp = new JPanel(new BorderLayout());
JLabel mainl = new JLabel("学生信息管理平台",SwingConstants.CENTER);
mainl.setFont(new Font("serif",Font.BOLD,30));
mainp.add(mainl);
pframe.add(mainp,"main");
clayout.show(pframe, "main");
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == jm21 || e.getSource() == jb1){
if(ip == null){
ip= new InsertPanel();
pframe.add(ip,"insert");
}
clayout.show(pframe, "insert");
this.setTitle("输入学生信息");
}
else if(e.getSource() == jm22 || e.getSource() == jb2){
if(sp == null){
sp= new SelectPanel();
pframe.add(sp,"select");
}
clayout.show(pframe, "select");
this.setTitle("查询学生信息");
}
else if(e.getSource() == jm11 || e.getSource() == jb3){
System.exit(0);
}
}
}
第二个:
import javax.swing.JFrame;
public class MainTest {
public static void main(String [] args){
MainFrame f = new MainFrame("学生信息管理平台");
f.setSize(400,300);
f.setLocation(350,250);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
第二个:
import java.sql.Connection;
import java.sql.DriverManager;
public class MySQLConnection {
static Connection getCon(){
Connection con = null;
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/test","root","123");
}
catch(Exception e){
System.out.println("建立数据库连接遇到异常!");
}
return con;
}
}
第四个:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class SelectPanel extends JPanel implements ActionListener{
JButton jb;
JTextField jt;
JTextField jt1,jt2,jt3,jt4;
public SelectPanel(){
JLabel jl = new JLabel("请输入学号:",SwingConstants.CENTER);
jt = new JTextField();
jb = new JButton("确定");
JPanel jp1 = new JPanel(new GridLayout(1,3));
jp1.add(jl);
jp1.add(jt);
jp1.add(jb);
JLabel j1,j2,j3,j4;
j1 = new JLabel("学号:",SwingConstants.CENTER);
j2 = new JLabel("姓名:",SwingConstants.CENTER);
j3 = new JLabel("性别:",SwingConstants.CENTER);
j4 = new JLabel("年龄:",SwingConstants.CENTER);
jt1 = new JTextField(6);
jt1.setEditable(false);
jt2 = new JTextField(6);
jt2.setEditable(false);
jt3 = new JTextField(6);
jt3.setEditable(false);
jt4 = new JTextField(6);
jt4.setEditable(false);
JPanel jp2 = new JPanel(new BorderLayout());
JPanel jp3 = new JPanel(new GridLayout(4,2));
jp2.add(new JLabel(""),BorderLayout.NORTH);
jp3.add(j1);
jp3.add(jt1);
jp3.add(j2);
jp3.add(jt2);
jp3.add(j3);
jp3.add(jt3);
jp3.add(j4);
jp3.add(jt4);
jp2.add(jp3);
this.setLayout(new BorderLayout());
add(jp1,BorderLayout.NORTH);
add(jp2);
jb.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == jb){
String stuNo = jt.getText().trim();
Student s = new Student();
boolean b = true;
try{
b = s.selectByStuNo(stuNo);
}
catch(Exception ex){
System.out.println("查询学生信息遇到异常!");
}
if(b){
jt1.setText(s.getStuNo());
jt2.setText(s.getName());
jt3.setText(s.getGender());
int a = s.getAge();
Integer i = new Integer(a);
jt4.setText(i.toString());
}
else{
JOptionPane.showMessageDialog(null, "无此学生!");
}
}
}
}
第五个:
import javax.swing.JFrame;
public class SelectTest {
public static void main(String [] args){
JFrame f = new JFrame("查询学生信息");
SelectPanel p = new SelectPanel();
f.add(p);
f.setSize(400,300);
f.setLocation(300,250);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
第六个:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Student {
String stuNo;
String name;
String gender;
int age;
public Student(){}
public Student(String stuNo,String name,String gender, int age){
this.stuNo = stuNo;
this.name = name;
this.gender = gender;
this.age = age;
}
public String getStuNo(){
return stuNo;
}
public void setStuNo(String stuNo){
this.stuNo = stuNo;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getGender(){
return gender;
}
public void setGender(String gender){
this.gender = gender;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public boolean insertStudent(){
boolean b = true;
try{
Connection con = MySQLConnection.getCon();
Statement statement = con.createStatement();
String sql = "insert into student values('" + stuNo + "','" + name +"','" + gender + "'," + age + ")";
sql = new String(sql.getBytes("gb2312"),"ISO8859_1");
statement.executeUpdate(sql);
con.close();
}
catch(Exception e){
b = false;
System.out.println("插入数据库遇到异常!");
}
return b;
}
public boolean selectByStuNo(String stuNo)throws Exception{
boolean b = true;
Connection con = MySQLConnection.getCon();
Statement statement = con.createStatement();
String sql = "select * from student where stuNo =" + stuNo;
ResultSet rs = statement.executeQuery(sql);
if(rs != null && rs.next()){
String no = rs.getString(1);
this.setStuNo(no);
String n = rs.getString(2);
n = new String(n.getBytes("ISO8859_1"),"gb2312");
this.setName(n);
String g = rs.getString(3);
g = new String (g.getBytes("ISO8859_1"),"gb2312");
this.setGender(g);
this.setAge(rs.getInt(4));
b = true;
}
rs.close();
statement.close();
con.close();
return b;
}
}
数据库你自己弄吧,我没时间弄了!初学得多动手哦
㈢ 用JAVA编程的通过SQL连接数据库的商品库存管理系统的源代码
package com.company.;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class BaseDao {
// 数据库驱动
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//url
String url = "jdbc:sqlserver://数据库ip:端口号;databaseName=数据库名;";
//用户名
String uname = "数据库用户名";
//密码
String pwd = "数据库密码";
/**
* 获得连接对象
* @return
*/
protected Connection getCon(){
//返回的连接
Connection con = null;
try {
//载入驱动
Class.forName(driver);
//得到连接
con = DriverManager.getConnection(url, uname, pwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
/**
* 关闭数据库
* @param con
* @param stmt
* @param rs
*/
protected void closeDB(Connection con, Statement stmt, ResultSet rs){
if(rs != null){
try {
//关闭结果集
rs.close();
rs = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null){
try {
//关闭语句对象
stmt.close();
stmt = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null){
try {
//关闭连接对象
con.close();
con = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
protected void closeDB(Connection con, PreparedStatement pstmt, ResultSet rs){
if(rs != null){
//关闭结果集
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
pstmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
con = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
这个是我写的一个基本的连接sql2005数据库的代码,.! 不知道你能不能用,! 你看一下吧, 连接的时候需要sqljdbc.jar数据库驱动,!
㈣ vb如何连接sql数据库,求源码
Public My_Cnn As New ADODB.Connection '连接数据库
StrCnn = "Provider=SQLOLEDB.1;Password=密码;Persist Security Info=True;User ID=用户名;Initial Catalog=数据库名;Data Source=服务器名"
My_Cnn.CursorLocation = adUseClient
My_Cnn.Open StrCnn
使用数据库
Dim sql As String
Dim My_temp As New ADODB.Recordset
执行SQL语句(一般插入,删除数据)
sql = "数据库语句"
My_cnn.Execute sql
读取数据
sql = "查询语句"
My_temp.Open sql, My_cnn, adOpenDynamic, adLockOptimistic
My_temp.field("字段名")
㈤ 数据库图书管理系统代码
create database db
use db
create table 借阅等级信息(
借阅等级 int primary key,
最长借阅时间 int,
最大借阅数量 int,
)
insert into 借阅等级信息 values
(0, 30, 10),
(1, 60, 20),
(2, 90, 30),
(3, 120, 40)
create table 读者信息(
姓名 char(15) not null,
证件号 char(12) primary key,
借阅等级 int default 0,
累计借书 int default 0,
foreign key(借阅等级) references 借阅等级信息(借阅等级)
)
insert into 读者信息(姓名, 证件号, 借阅等级) values
('张三', '541607120165', 1),
('李四', '541707010185', 3),
('王五', '541707120165', 1),
('赵六', '541505980268', 2),
('孙七', '541407010169', 0),
('周八', '541307010489', 1)
create table 出版社信息(
出版社 varchar(20) primary key,
地址 varchar(25),
联系电话 char(7)
)
insert into 出版社信息 values
('清华大学出版社', '北京', '4979421'),
('晟威出版社', '天津', '5564130'),
('南海出版公司', '海南', '4984910'),
('上海文艺出版社', '上海', '6640239')
create table 图书信息(
索书号 char(15) primary key,
作者 char(15),
书名 char(15),
出版社 varchar(20),
出版时间 date,
foreign key(出版社)references 出版社信息(出版社)
)
insert into 图书信息 values
('b12987', '严蔚敏', '数据结构', '清华大学出版社', '2012-02-06'),
('b97894', '东野圭吾', '幻夜', '南海出版公司', '2004-08-02'),
('b16546', '吴玉华', '物理实验教程', '清华大学出版社', '2013-05-15'),
('b89490', '张雪峰', '考研指点', '晟威出版社', '2016-12-12'),
('b56400', '郏宗培', '纸上寻仙记', '上海文艺出版社', '2011-02-05')
create table 单本图书信息(
条码号 char(7) primary key check(len(条码号) = 7),
索书号 char(15),
馆藏地 varchar(40),
书刊状态 varchar(6) check(书刊状态 in ('可借', '借出', '非可借')),
历史借阅量 int default 0,
foreign key(索书号)references 图书信息(索书号)
)
insert into 单本图书信息(条码号, 索书号, 馆藏地, 书刊状态) values
('t987628', 'b97894', '三楼A8', '借出'),
('t594805', 'b97894', '二楼C7', '可借'),
('t984910', 'b89490', '五楼A2', '借出'),
('t940566', 'b12987', '负一楼D3', '借出')
create table 借阅信息(
借阅号 char(6) primary key,
借阅时间 date,
归还时间 date,
图书条码号 char(7),
借阅人证件号 char(12),
foreign key(图书条码号) references 单本图书信息(条码号),
foreign key(借阅人证件号) references 读者信息(证件号)
)
create table 评论信息(
评论号 char(8) primary key,
评分 numeric(2, 1),
内容 varchar(200),
评论时间 date,
评论者id char(12),
索书号 char(15),
foreign key(索书号)references 图书信息(索书号),
foreign key(评论者id)references 读者信息(证件号)
)
insert into 评论信息 values
('p12391', 8.9, '很有趣', '2015-06-24', '541707010185', 'b97894'),
('p98523', 7.8, '受益颇多', '2016-05-22', '541307010489', 'b89490'),
('p94606', 6.8, '完全看不懂orz', '2017-05-02', '541607120165', 'b12987')
create table 主题词信息(
ID char(8) primary key,
类别 char(15),
索书号 char(15),
foreign key(索书号)references 图书信息(索书号)
)
insert into 主题词信息 values
('z64400', '计算机', 'b12987'),
('z95410', '物理', 'b16546'),
('z98500', '考研', 'b89490'),
('z64165', '推理悬疑', 'b97894'),
('z69850', '仙侠', 'b56400')
use db
go
create trigger trigger1
on 借阅信息
after insert
as
begin
update 读者信息 --更改读者累计借书量
set 累计借书 = 累计借书 + 1
from 读者信息, inserted
where 读者信息.证件号 = inserted.借阅人证件号
update 单本图书信息 --更改图书状态
set 单本图书信息.书刊状态 = '借出'
from inserted, 单本图书信息
where inserted.图书条码号 = 单本图书信息.条码号
update 单本图书信息
set 历史借阅量 = 历史借阅量 + 1 --更改图书历史借阅量
from inserted, 单本图书信息
where inserted.图书条码号 = 单本图书信息.条码号
end
insert into 借阅信息 values
('j13488', '2018-05-01', '2018-08-01', 't987628', '541407010169')
insert into 借阅信息 values
('j14910', '2016-12-11', '2017-01-25', 't984910', '541607120165')
insert into 借阅信息 values
('j97890', '2018-05-14', '2018-06-14', 't940566', '541607120165')
go
create view view_1(图书条码, 借阅者姓名, 编号, 借阅时间, 应还时间)
as
select 图书条码号, 姓名, 证件号, 借阅时间, 归还时间
from 借阅信息, 读者信息
where 借阅信息.借阅人证件号 = 读者信息.证件号 and 归还时间 > getdate()
go
create view view_2(图书条码, 历史总借阅量)
as
select 条码号, 历史借阅量
from 单本图书信息, 图书信息
where 单本图书信息.索书号 = 图书信息.索书号 and 书名 = '幻夜'
go
create view view_3(类别, 图书条码, 历史总借阅量)
as
select 类别, 条码号, 历史借阅量
from 单本图书信息, 图书信息, 主题词信息
where 主题词信息.索书号 = 图书信息.索书号 and 图书信息.索书号 = 单本图书信息.索书号 and 类别 = '考研'
go
create view view_4(读者编号, 条码, 图书名称, 应还日期)
as
select 借阅人证件号, 图书条码号, 书名, 归还时间
from 单本图书信息, 图书信息, 借阅信息
where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号
and 归还时间 > getdate() and 借阅人证件号 = '541607120165'
go
create view view_5(读者编号, 图书条码, 图书名称, 借阅日期, 归还日期)
as
select 借阅人证件号, 图书条码号, 书名, 借阅时间, 归还时间
from 单本图书信息, 图书信息, 借阅信息
where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号
and 借阅人证件号 = '541607120165'
go
create view view_6(读者编号, 图书名称, 评论时间, 评论内容)
as
select 评论者id, 书名, 评论时间, 内容
from 借阅信息, 单本图书信息, 评论信息, 图书信息
where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 评论信息.索书号
and 评论信息.索书号 = 图书信息.索书号 and 评论者id = '541607120165'
go
create view view_7(出版社名称, 图书名称, 出版时间)
as
select top 100 percent 出版社信息.出版社, 书名, 出版时间
from 出版社信息, 图书信息
where 出版社信息.出版社 = 图书信息.出版社
order by 出版时间 asc
--执行
select * from view_1
select * from view_2
select * from view_3
select * from view_4
select * from view_5
select * from view_6
select * from view_7 order by 出版时间 asc
(5)数据库管理系统源码扩展阅读:
数据库模型:
对象模型
层次模型(轻量级数据访问协议)
网状模型(大型数据储存)
关系模型
面向对象模型
半结构化模型
平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)
架构
数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。
内层:最接近实际存储体,亦即有关数据的实际存储方式。
外层:最接近用户,即有关个别用户观看数据的方式。
概念层:介于两者之间的间接层。
数据库索引
主条目:数据库索引
数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。
另外,索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为"空值(null)"。
例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。
数据库操作:事务
主条目:数据库事务
事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。
网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。
参考资料来源:网络——数据库
㈥ (高分)急求连接数据库的JAVA学生信息管理系统源代码
数据库连接(Connection)
数据库连接
获取数据库连接有两种方法,一种是通过驱动程序管理器DriverManager类,另一种则是使用DataSource接口。这两种方法都提供了了一个getConnection方法,用户可以在程序中对它们进行相应处理后调用这个方法来返回数据库连接。
• DriverManager类
• DataSource接口
• Connection接口
• JDBC URL
jdbc:<subprotocol>:<subname>
• 驱动程序注册方法
(1)调用Class.forName方法
(2)设置jdbc.drivers系统属性
• DriverManager方法
DriverManager类中的所有方法都是静态方法,所以使用DriverManager类的方法时,不必生成实例。
DriverManager
• getConnection方法
作用是用于获取数据库连接,原型如下:
public static Connection getConnection(String url)
throws SQLException;
public static Connection getConnection(String url, String user, String password)
throws SQLException;
public static Connection getConnection(String url, Properties info)
throws SQLException;
• 使用DriverManager的getConnetion方法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection
("jdbc:odbc:sqlserver", "sa", "sa");
• 使用设置jdbc.drivers系统属性的方法
java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver test.java
DataSource 接口
……
//从上下文中查找数据源,并获取数据库连接
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("sqlserver");
Connection conn = ds.getConnection();
//查询数据库中所有记录
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
……
Connection 接口
Connection接口代表了已经建立的数据库连接,它是整个JDBC的核心内容。Connnection接口中的方法按照它们所实现的功能,可以分为三类:
• 生成数据库语句
• 管理数据库事务
• 获取数据库信息
生成数据库语句
JDBC将数据库语句分成三种类型 :
• 生成Statement 语句 :
Connection.createStatement()
• 生成PreparedStatement 语句 :
Connection. prepareStatement()
• 生成CallableStatement 语句 :
Connection. prepareCall ()
管理数据库事务
• 默认情况下,JDBC将一条数据库语句视为一个完整的事务。可以关掉默认事务管理:
public void setAutoCommit(Boolean autoCommit) throws SQLException;
将autoCommit的值设置为false,就关掉了自动事务管理模式
• 在执行完事务后,应提交事务:
public void commit() throws SQLException;
• 可以取消事务:
public void rollback() throws SQLException;
第二讲 第四部分
数据库语句
数据库语句
JDBC数据库语句共有三种类型:
• Statement:
Statement语句主要用于嵌入一般的SQL语句,包括查询、更新、插入和删除等等。
• PreparedStatement:
PreparedStatement语句称为准备语句,它是将SQL语句中的某些参数暂不指定,而等到执行时在统一指定。
• CallableStatement:
CallableStatement用于执行数据库的存储过程。
Statement 语句
• executeQuery方法
• executeUpdate方法
• execute方法
• close方法
executeQuery方法
• executeQuery方法主要用于执行产生单个结果集的SQL查询语句(QL),即SELECT语句。executeQuery方法的原型如下所示:
• public ResultSet executeQuery(String sql) throws SQLException;
executeUpdate方法
• executeUpdate方法主要用于执行 INSERT、UPDATE、DELETE语句,即SQL的数据操作语句(DML)
• executeUpdate方法也可以执行类似于CREATE TABLE和DROP TABLE语句的SQL数据定义语言(DDL)语句
• executeUpdate方法的返回值是一个整数,指示受影响的行数(即更新计数)。而对于CREATE TABLE 或 DROP TABLE等并不操作特定行的语句,executeUpdate的返回值总为零。
execute方法
execute方法用于执行:
• 返回多个结果集
• 多个更新计数
• 或二者组合的语句
execute方法
• 返回多个结果集:首先要调用getResultSet方法获得第一个结果集,然后调用适当的getter方法获取其中的值。要获得第二个结果集,需要先调用getMoreResults方法,然后再调用getResultSet方法。
• 返回多个更新计数:首先要调用getUpdateCount方法获得第一更新计数。然后调用getMoreResults,并再次调用getUpdateCount获得后面的更新计数。
• 不知道返回内容:如果结果是ResultSet对象,则execute方法返回true;如果结果是int类型,则意味着结果是更新计数或执行的语句是DDL命令。
execute方法
为了说明如果处理execute方法返回的结果,下面举一个代码例子:
stmt.execute(query);
while (true) {
int row = stmt.getUpdateCount();
//如果是更新计数
if (row > 0) {
System.out.println("更新的行数是:" + row);
stmt.getMoreResults();
continue;
}
execute方法
//如果是DDL命令或0个更新
if (row == 0) {
System.out.println("没有更新,或SQL语句是一条DDL语句!");
stmt.getMoreResults();
continue;
}
//如果是一个结果集
ResultSet rs = stmt.getResultSet;
if (rs != null) {
while (rs.next()) {
// 处理结果集
. . .
}
stmt.getMoreResults();
continue;
}
break;
}
PreparedStatement 语句
登录一个网站或BBS时 :
• 使用Statement语句
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery
(“SELECT password FROM userinfo
WHERE id=userId");
• 使用PreparedStatement语句
PreparedStatement pstmt=conn.prepareStatement
(“SELECT password FROM userinfo
WHERE id=?");
pstmt.setString(1, userId);
PreparedStatement语句
• 常用的setter方法
public void setBoolean(int parameterIndex, boolean x) throws SQLException;
public void setByte(int parameterIndex, byte x) throws SQLException;
public void setShort(int parameterIndex, short x) throws SQLException;
public void setInt(int parameterIndex,int x) throws SQLException;
public void setLong(int parameterIndex, long x) throws SQLException;
public void setFloat(int parameterIndex, float x) throws SQLException;
public void setDouble(int parameterIndex, double x) throws SQLException;
public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException;
public void setString(int parameterIndex, String x) throws SQLException;
public void setBytes(int parameterIndex, byte[] x) throws SQLException;
public void setDate(int parameterIndex, Date x) throws SQLException;
public void setTime(int parameterIndex, Time x) hrows SQLException;
public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException;
PreparedStatement语句
• PreparedStatement接口是由Statement接口扩展而来的,重写了executeQuery方法、executeUpdate方法和execute 方法
• public ResultSet executeQuery() throws SQLException
• public int executeUpdate() throws SQLException
• public boolean execute() throws SQLException
CallableStatement语句
• CallableStatement语句是由Connection接口的prepareCall方法创建的,创建时需要传入字符串参数,参数的形式为:
• {call procere_name[(?, ?, ...)]}
• {? = call procere_name[(?, ?, ...)]}
• {call procere_name}
CallableStatement语句
• 其中的问号是参数占位符,参数共有两种:
• IN参数
• OUT参数
• IN参数使用setter方法来设置
• OUT参数则使用registerOutParameter方法来设置
CallableStatement 语句
CallableStatement cstmt = con.prepareCall
("{call getTestData(?, ?)}");
cstmt.registerOutParameter
(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter
(2, java.sql.Types.DECIMAL, 3);
cstmt.executeQuery();
byte x = cstmt.getByte(1);
java.math.BigDecimal n =
cstmt.getBigDecimal(2, 3);
第二讲 第五部分
结 果 集
结果集
• JDBC为了方便处理查询结果,又专门定义了一个接口,这个接口就是ResultSet接口。ResultSet接口提供了可以访问数据库查询结果的方法,通常称这个接口所指向的对象为结果集。
• 有两种方法得到结果集,一种是直接执行查询语句,将结果存储在结果集对象上;另一种是不存储返回结果,而在需要时调用数据库语句的getResultSet方法来返回结果集
结果集
• 结果集指针
由于返回的结果集可能包含多条数据记录,因此ResultSet 接口提供了对结果集的所有数据记录轮询的方法。结果集自动维护了一个指向当前数据记录的指针,初始时这个指针是指向第一行的前一个位置。 next 方法就是用于向前移动指针的
结果集
• 结果集属性
默认情况下,结果集是一个不可更新集,并且结果集的指针也只能向前移动。也就是说,在得到了一个结果集之后,用户只能按照从第一条记录到最后一条记录的顺序依次向后读取,而不能跳到任意条记录上,也不能返回到前面的记录。不仅如此,结果集的这种轮询只能进行一次,而不能再将指针重置到初始位置进行多次轮询
结果集
• 结果集属性
类型
并发性
有效性
• 属性的设置是在生成数据库语句时通过向生成方法传入相应的参数设定的,而当结果集已经返回时就不能够再改变它的属性了。
结果集生成Statement语句共有三种方法
public Statement createStatement() throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency)
throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
结果集
• 生成PreparedStatement语句共有六种方法
public PreparedStatement prepareStatement(String sql) throws SQLException;
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
public PreparedStatement prepareStatement(String sql. String[] columnNames)
throws SQLException;
结果集
• 生成CallableStatement语句共有三种方法
public CallableStatement prepareCall(String sql)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
结果集
结果集类型
• 结果集的类型共有三种,TYPE_FORWARD_ONLY类型的结果集只能向前移动指针,而TYPE_SCROLL_INSENSITIVE类型和TYPE_SCROLL_SENSITIVE类型的结果集则可以任意移动指针。后两种类型的区别在于,前者对来自其它处的修改不敏感(静态),而后者则对于别人的修改敏感(动态视图)。
结果集
结果集类型
• 对于可以任意移动指针的结果集,可以用来移动指针的方法包括:
• next 和previous :
• absolute 和relative :参数可正可负
• afterLast 、beforeFirst 、last 和first :
结果集
结果集并发性
• 结果集的并发性共有两种,CONCUR_READ_ONLY的结果集是只读而不可更新的;而CONCUR_UPDATABLE的结果集则是可以通过update方法进行更新的。
• ResultSet接口提供了一组update方法,用于更新结果集中的数据。这些方法与PreparedStatement接口中定义的setter方法一样,也是与类型相对应的。所有的update方法都以update开头 。
• 所有的update方法都有两个参数,第一个参数用于指定更新的列,它可以是列名称也可以是列的序号;第二个参数则表示将要更新列的值。
结果集
结果集并发性
• Statement stmt = conn.createStatement
• (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
• ResultSet rs = stmt.executeQuery("SELECT * FROM student " +
• "WHERE grade=2 AND math>60 AND physics>60 AND " +
• "chemistry>60 AND english>60 AND chinese>60");
• while(rs.next()){
• rs.updateString("grade", "3");
• rs.updateRow();
• }
结果集
结果集有效性
• 结果集的有效性是指在调用了Connection 接口的commit 方法后,结果集是否自动关闭。所以它只有两个可选值,即HOLD_CURSORS_OVER_COMMIT 和CLOSE_CURSORS_AT_COMMIT 。前者表示调用commit 方法之后,结果集不关闭;而后者则表示关闭结果集。
结果结果集
• 结果集的getter方法
ResultSet接口还提供了一组getter方法,用于返回当前记录的属性值。它们都是以get开头的,后接数据类型。比如,如果要返回一个float类型的列值,则应调用getFloat方法。每一种类型的getter方法都有两种形式,它们的名称相同而参数不同。这两种形式的getter方法都只有一个参数,第一种形式的getter方法参数是String类型的,用于指定列的名称;另外一种形式的getter方法参数则是int类型的,用于指定列的序号。