當前位置:首頁 » 操作系統 » 資料庫管理系統源碼

資料庫管理系統源碼

發布時間: 2023-09-12 14:22:29

㈠ 「源碼分享」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類型的,用於指定列的序號。

熱點內容
領航s1配置怎麼樣 發布:2025-01-26 09:58:10 瀏覽:763
公司區域網搭建伺服器搭建 發布:2025-01-26 09:16:56 瀏覽:433
android裁剪圓形圖片 發布:2025-01-26 09:05:56 瀏覽:411
小貸源碼 發布:2025-01-26 08:20:58 瀏覽:536
更換電腦名登錄伺服器 發布:2025-01-26 07:56:52 瀏覽:240
後台phpjava 發布:2025-01-26 07:12:34 瀏覽:657
微信解綁密碼是什麼 發布:2025-01-26 06:50:07 瀏覽:734
app如何訪問伺服器 發布:2025-01-26 06:36:56 瀏覽:741
拳皇安卓單機哪裡下載 發布:2025-01-26 06:30:46 瀏覽:539
注冊會員時積分消費密碼是什麼 發布:2025-01-26 06:30:45 瀏覽:247