Mysql中CAPI的学生信息管理
使用嵌入式MySQL服务器库,能够在客户端应用程序中使用具备全部特性的MySQL服务器。
主要优点在于,增加了速度,并使得嵌入式应用程序的管理更简单。
嵌入式服务器库是以MySQL的客户端/服务器版本为基础的,采用C/C++语言编写。
其结果是嵌入式服务器也是用C/C++语言编写的。
在其他语言中,嵌入式服务器不可用。
API与嵌入式MySQL版本和客户端/服务器版本等效。
要想更改旧的线程式应用程序以使用嵌入式库,正常情况下,仅需添加对下述函数的调用即可。
与MySQL交互时,应用程序应使用该一般性原则:
- 通过调用mysql_library_init(),初始化MySQL库。库可以是mysqlclient
C客户端库,或mysqld嵌入式服务器库,具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。
2.
通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。
3.
发出SQL语句并处理其结果。(在下面的讨论中,详细介绍了使用它的方法)。 - 通过调用mysql_close(),关闭与MySQL服务器的连接。
- 通过调用mysql_library_end(),结束MySQL库的使用。
调用mysql_library_init()和mysql_library_end()的目的在于,为MySQL库提供恰当的初始化和结束处理。对于与客户端库链接的应用程序,它们提供了改进的内存管理功能。如果不调用mysql_library_end(),内存块仍将保持分配状态(这不会增加应用程序使用的内存量,但某些内存泄漏检测器将抗议它)。对于与嵌入式服务器链接的应用程序,这些调用会启动并停止服务器。
mysql_library_init()和mysql_library_end()实际上是#define符号,这类符号使得它们等效于mysql_server_init()和mysql_server_end(),但其名称更清楚地指明,无论应用程序使用的是mysqlclient或mysqld库,启动或结束MySQL库时,应调用它们。对于早期的MySQL版本,可调用mysql_server_init()和mysql_server_end()取而代之。
如果愿意,可省略对mysql_library_init()的调用,这是因为,必要时,mysql_init()会自动调用它。
要想连接到服务器,可调用mysql_init()来初始化连接处理程序,然后用该处理程序(以及其他信息,如主机名、用户名和密码)调用mysql_real_connect()。建立连接后,在低于5.0.3版的API中,mysql_real_connect()会将再连接标志(MYSQL结构的一部分)设置为1,或在较新的版本中,将其设置为0。对于该标志,值“1”指明,如果因连接丢失而无法执行语句,放弃之前,会尝试再次连接到服务器。从MySQL
5.0.13开始,可以在mysql_options()上使用MYSQL_OPT_RECONNECT选项,以控制再连接行为。完成连接后,调用mysql_close()中止它。
当连接处于活动状态时,客户端或许会使用mysql_query()或mysql_real_query()向服务器发出SQL查询。两者的差别在于,mysql_query()预期的查询为指定的、由Null终结的字符串,而mysql_real_query()预期的是计数字符串。如果字符串包含二进制数据(其中可能包含Null字节),就必须使用mysql_real_query()。
对于每个非SELECT查询(例如INSERT、UPDATE、DELETE),通过调用mysql_affected_rows(),可发现有多少行已被改变(影响)。
对于SELECT查询,能够检索作为结果集的行。注意,某些语句因其返回行,类似与SELECT。包括SHOW、DESCRIBE和EXPLAIN。应按照对待SELECT语句的方式处理它们。
客户端处理结果集的方式有两种。一种方式是,通过调用mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。
在这两种情况下,均能通过调用mysql_fetch_row()访问行。通过mysql_store_result(),mysql_fetch_row()能够访问以前从服务器获得的行。通过mysql_use_result(),mysql_fetch_row()能够实际地检索来自服务器的行。通过调用mysql_fetch_lengths(),能获得关于各行中数据大小的信息。
完成结果集操作后,请调用mysql_free_result()释放结果集使用的内存。
这两种检索机制是互补的。客户端程序应选择最能满足其要求的方法。实际上,客户端最常使用的是mysql_store_result()。
mysql_store_result()的1个优点在于,由于将行全部提取到了客户端上,你不仅能连续访问行,还能使用mysql_data_seek()或mysql_row_seek()在结果集中向前或向后移动,以更改结果集内当前行的位置。通过调用mysql_num_rows(),还能发现有多少行。另一方面,对于大的结果集,mysql_store_result()所需的内存可能会很大,你很可能遇到内存溢出状况。
mysql_use_result()的1个优点在于,客户端所需的用于结果集的内存较少,原因在于,一次它仅维护一行(由于分配开销较低,mysql_use_result()能更快)。它的缺点在于,你必须快速处理每一行以避免妨碍服务器,你不能随机访问结果集中的行(只能连续访问行),你不知道结果集中有多少行,直至全部检索了它们为止。不仅如此,即使在检索过程中你判定已找到所寻找的信息,也必须检索所有的行。
通过API,客户端能够恰当地对查询作出响应(仅在必要时检索行),而无需知道查询是否是SELECT查询。可以在每次mysql_query()或mysql_real_query()后,通过调用mysql_store_result()完成该操作。如果结果集调用成功,查询为SELECT,而且能够读取行。如果结果集调用失败,可调用mysql_field_count()来判断结果是否的确是所预期的。如果mysql_field_count()返回0,查询不返回数据(表明它是INSERT、UPDATE、DELETE等),而且不返回行。如果mysql_field_count()是非0值,查询应返回行,但没有返回行。这表明查询是失败了的SELECT。关于如何实现该操作的示例,请参见关于mysql_field_count()的介绍。
无论是mysql_store_result()还是mysql_use_result(),均允许你获取关于构成结果集的字段的信息(字段数目,它们的名称和类型等)。通过重复调用mysql_fetch_field(),可以按顺序访问行内的字段信息,或者,通过调用mysql_fetch_field_direct(),能够在行内按字段编号访问字段信息。通过调用mysql_field_seek(),可以改变当前字段的光标位置。对字段光标的设置将影响后续的mysql_fetch_field()调用。此外,你也能通过调用mysql_fetch_fields(),一次性地获得关于字段的所有信息。
为了检测和通报错误,MySQL提供了使用mysql_errno()和mysql_error()函数访问错误信息的机制。它们能返回关于最近调用的函数的错误代码或错误消息,最近调用的函数可能成功也可能失败,这样,你就能判断错误是在何时出现的,以及错误是什么。
Mysql中CAPI的学生信息管理系统新普京娱乐场,普京vip,www.新澳门普京 ,
首先我是在fedora-8中进行的实验
我把mysql需要的库安装在/usr/lib下,头文件安装在/usr/include/mysql/mysql.h下
利用 mysql中的C API对学生信息进行单个表格的管理。
部分源代码:
void Show(char Table_Name[]) //输出表格内容
{
char str[25];
sprintf(str, "select * from %s", Table_Name);
mysql_real_query(mysql, str, (unsigned int)strlen(str));
results = mysql_store_result(mysql);
printf("\n");
while((field = mysql_fetch_field(results)))
{
printf("%s\t\t", field->name);
}printf("\n");
while((record = mysql_fetch_row(results)))
{
num_fields = mysql_num_fields(results);
for(i = 0; i < num_fields; i++)
{
printf("%s\t\t", record[i]);
}printf("\n");
}
mysql_free_result(results);
}
void Insert(char Table_Name[]) //添加信息
{
char str1[4][10];
char str[30];
printf("请输入名字: ");
scanf("%s", str1[0]);
printf("请输入学号: ");
scanf("%s", str1[1]);
printf("请输入数学成绩: ");
scanf("%s", str1[2]);
printf("请输入语文成绩: ");
scanf("%s", str1[3]);
sprintf(str, "Insert into %s values(\"%s\", \"%s\", \"%s\", \"%s\")", Table_Name,str1[0],str1[1],str1[2],str1[3]);
printf("\n>>>%s\n", str);
mysql_real_query(mysql, str, (unsigned int)strlen(str));
printf(">>>添加成功!!!\n\n");
}
void Delete(char Table_Name[]) //删除信息
{
char Delete_Name[10];
char Delete_Str[40];
printf("请输入要删除的信息的名字: ");
scanf("%s", Delete_Name);
sprintf(Delete_Str, "Delete from %s where name=\"%s\"", Table_Name, Delete_Name);
printf("\n>>>%s\n", Delete_Str);
mysql_real_query(mysql, Delete_Str, (unsigned int)strlen(Delete_Str));
printf(">>>删除成功!!!\n\n");
}
void Find(char Table_Name[]) //修改信息
{
char Find_Str[40];
char Find_Name[10];
printf("请选择要查询的名字: ");
scanf("%s", Find_Name);
sprintf(Find_Str,"select * from %s where name=\"%s\"", Table_Name, Find_Name);
printf("\n>>>%s\n", Find_Str);
/*执行指定为“以Null终结的字符串”的SQL查询*/
mysql_real_query(mysql, Find_Str, (unsigned int)strlen(Find_Str));
results = mysql_store_result(mysql); //能够访问以前从服务器获得的行
printf(">>>共有%d条信息\n\n", *results);
while((field = mysql_fetch_field(results)))
{
printf("%s\t\t", field->name);
}printf("\n");
while((record = mysql_fetch_row(results))) //能够访问以前从服务器获得的行
{
num_fields = mysql_num_fields(results);
for(i = 0; i < num_fields; i++)
{
printf("%s\t\t", record[i]);
}
printf("\n");
}
printf("\n");
}
使用嵌入式MySQL服务器库,能够在客户端应用程序中使用具备全部特性的MySQL服务器。
主要优点在于,增加了速度…
Java+Mysql+学生管理系统,mysql学生管理系统
最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,也就自己写了一个,不过功能实现的不是很多。
开发语言:java; 开发环境:Mysql, java; 开发工具:eclipse
开发此案例,首先得在电脑上有java开发环境和Mysql,
java开发环境与Mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:[email protected]
此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加、删除、修改。
开发步骤:
1.在数据库中建表:
1 create table stu(
2 stuId String,
3 stuName String,
4 stuSex String,
5 stuAge int,
6 stuJG String,
7 stuDept Sring
8 );
2.java 代码主要由四个类组成:
Test3包含主函数;StuModel用来刷新、呈现数据库;StuAddDiag用来实现增添读者功能;StuUpDiag是修改学生信息。具体代码如下:
Test3.java:
1 import javax.swing.*;
2 import java.util.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 import java.sql.Connection;
6 import java.sql.Driver;
7 import java.sql.DriverManager;
8 import java.sql.PreparedStatement;
9 import java.sql.ResultSet;
10 import java.sql.Statement;
11
12 public class Test3 extends JFrame implements ActionListener {
13 //定义一些控件
14 JPanel jp1,jp2;
15 JLabel jl1,jl2;
16 JButton jb1,jb2,jb3,jb4;
17 JTable jt;
18 JScrollPane jsp;
19 JTextField jtf;
20 StuModel sm;
21 //定义连接数据库的变量
22 Statement stat = null;
23 PreparedStatement ps;
24 Connection ct = null;
25 ResultSet rs = null;
26
27 public static void main(String[] args){
28 Test3 test3 = new Test3();
29 }
30 //构造函数
31 public Test3(){
32 jp1 = new JPanel();
33 jtf = new JTextField(10);
34 jb1 = new JButton("查询");
35 jb1.addActionListener(this);
36 jl1 = new JLabel("请输入名字:");
37
38 jp1.add(jl1);
39 jp1.add(jtf);
40 jp1.add(jb1);
41
42 jb2 = new JButton("添加");
43 jb2.addActionListener(this);
44 jb3 = new JButton("修改");
45 jb3.addActionListener(this);
46 jb4 = new JButton("删除");
47 jb4.addActionListener(this);
48
49 jp2 = new JPanel();
50 jp2.add(jb2);
51 jp2.add(jb3);
52 jp2.add(jb4);
53
54 //创建模型对象
55 sm = new StuModel();
56
57
58 //初始化
59 jt = new JTable(sm);
60
61 jsp = new JScrollPane(jt);
62
63 //将jsp放入到jframe中
64 this.add(jsp);
65 this.add(jp1,"North");
66 this.add(jp2,"South");
67 this.setSize(600, 400);
68 //this.setLocation(300, 200);
69 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
70 this.setVisible(true);
71
73 }
75 public void actionPerformed(ActionEvent arg0) {
76 //判断是哪个按钮被点击
77 if(arg0.getSource() == jb1){
78 System.out.println("用户希望被查询...");
79 //因为把对表的数据封装到StuModel中,可以比较简单的完成查询
80 String name = this.jtf.getText().trim();
81 //写一个sql语句
82 String sql = "select * from stu where stuName = '"+name+"' ";
83 //构建一个数据模型类,并更新
84 sm = new StuModel(sql);
85 //更新jtable
86 jt.setModel(sm);
87
88 }
89
90 //一、弹出添加界面
91 else if(arg0.getSource() == jb2){
92 System.out.println("添加...");
93 StuAddDiag sa = new StuAddDiag(this,"添加学生",true);
94
95 //重新再获得新的数据模型,
96 sm = new StuModel();
97 jt.setModel(sm);
98 }else if(arg0.getSource() == jb4){
99 //二、删除记录
100 //1.得到学生的ID
101 int rowNum = this.jt.getSelectedRow();//getSelectedRow会返回给用户点中的行
102 //如果该用户一行都没有选,就返回-1
103 if(rowNum == -1){
104 //提示
105 JOptionPane.showMessageDialog(this, "请选中一行");
106 return ;
107 }
108 //得到学术ID
109 String stuId = (String)sm.getValueAt(rowNum, 0);
110 System.out.println("Id: "+stuId);
111
112 //连接数据库,完成删除任务
113 try{
114 //1.加载驱动
115 Class.forName("com.mysql.jdbc.Driver");
116 //2.连接数据库
117 String url = "jdbc:mysql://localhost:3306/spdb1";
118 String user = "root";
119 String passwd = "lfdy";
120
121 ct = DriverManager.getConnection(url, user, passwd);
122 System.out.println("连接成功");
123 ps = ct.prepareStatement("delete from stu where stuId = ?");
124 ps.setString(1,stuId);
125 ps.executeUpdate();
126
127 }catch(Exception e){
128 e.printStackTrace();
129 }finally{
130 try{
131 if(rs!= null){
132 rs.close();
133 rs = null;
134
135 }
136 if(ps!= null){
137 ps.close();
138 ps = null;
139 }
140 if(ct != null){
141 ct.close();
142 ct = null;
143 }
144 } catch(Exception e){
145 e.printStackTrace();
146 }
147 }
148 sm = new StuModel();
149 //更新jtable
150 jt.setModel(sm);
151 }else if(arg0.getSource() == jb3){
152 System.out.println("11111");
153 //三、用户希望修改
154 int rowNum = this.jt.getSelectedRow();
155 if(rowNum == -1){
156 //提示
157 JOptionPane.showMessageDialog(this, "请选择一行");
158 return ;
159 }
160 //显示对话框
161 System.out.println( "12435");
162 StuUpDiag su = new StuUpDiag(this, "修改学术", true, sm, rowNum);
163 sm = new StuModel();
164 jt.setModel(sm);
165 }
166 }
167 }
StuModel.java:
1 /*
2 * 这是我的一个stu表的模型
3 * 可以把对学生表的操作全都封装到这个类
4 */
5 package com.test2;
6
7 import java.sql.Connection;
8 import java.sql.DriverManager;
9 import java.sql.ResultSet;
10 import java.sql.Statement;
11 import java.util.Vector;
12 import javax.swing.table.*;
13
14 public class StuModel extends AbstractTableModel{
15
16 //rowData存放行数据,columnNames存放列名
17 Vector rowData,columnNames;
18
19 //定义连接数据库的变量
20 Statement stat = null;
21 Connection ct = null;
22 ResultSet rs = null;
23
24 //初始化
25 public void init(String sql){
26 if(sql.equals("")){
27 sql = "select * from stu";
28 }
29 //中间
30 //设置列名
31 columnNames = new Vector();
32 columnNames.add("学号");
33 columnNames.add("名字");
34 columnNames.add("性别");
35 columnNames.add("年龄");
36 columnNames.add("籍贯");
37 columnNames.add("门派");
38
39 //rowData存放多行
40 rowData = new Vector();
41
42 try{
43 //1.加载驱动
44 Class.forName("com.mysql.jdbc.Driver");
45 System.out.println("加载成功");
46 //2.连接数据库
47 //定义几个常量
48 String url = "jdbc:mysql://localhost:3306/spdb1";
49 String user = "root";
50 String passwd = "lfdy";
51
52 ct = DriverManager.getConnection(url,user,passwd);
53 stat = ct.createStatement();//创建stat对象
54 rs = stat.executeQuery(sql);//查询结果
55
56 while(rs.next()){
57 Vector hang = new Vector();
58 hang.add(rs.getString(1));
59 hang.add(rs.getString(2));
60 hang.add(rs.getString(3));
61 hang.add(rs.getInt(4));
62 hang.add(rs.getString(5));
63 hang.add(rs.getString(6));
64 //加入到rowData中
65 rowData.add(hang);
66
67 }
68
69 }catch(Exception e){
70 e.printStackTrace();
71 }finally{
72 try{
73 if(rs!=null){
74 rs.close();
75 rs = null;
76 }
77 if(stat != null){
78 stat.close();
79 stat = null;
80 }
81 if(ct != null){
82 ct.close();
83 ct = null;
84 }
85 }catch(Exception e){
86 e.printStackTrace();
87 }
88 }
89 }
90
91 //增加学生函数
92 public void addStu(String sql){
93 //根据用户输入的sql语句,完成添加任务
94
95
96
97 }
98
99 //第二个构造函数,通过传递的sql语句来获得数据模型
100 public StuModel(String sql){
101 this.init(sql);
102 }
103
104 //构造函数,用于初始化我的数据模型(表)
105 public StuModel(){
106 this.init("");
107 }
108
109 //得到共有多少行
110 public int getRowCount() {
111 // TODO Auto-generated method stub
112 return this.rowData.size();
113 }
114
115 //得到共有多少列
116 public int getColumnCount() {
117 // TODO Auto-generated method stub
118 return this.columnNames.size();
119 }
120
121 //得到某行某列的数据
122 public Object getValueAt(int row, int column) {
123 // TODO Auto-generated method stub
124 return ((Vector)(this.rowData.get(row))).get(column);
125 }
126
127 //得到属性名字
128 public String getColumnName(int column) {
129 // TODO Auto-generated method stub
130 return (String)this.columnNames.get(column);
131 }
132 }
StuAddDiag.java:
1 package com.test2;
2
3 import javax.swing.JDialog;
4 import javax.swing.*;
5 import java.awt.*;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.sql.Statement;
9 import java.sql.Connection;
10 import java.sql.DriverManager;
11 import java.sql.ResultSet;
12 import java.sql.*;
13
14 public class StuAddDiag extends JDialog implements ActionListener {
15 //定义我需要的swing组件
16 JLabel jl1,jl2,jl3,jl4,jl5,jl6;
17 JTextField jf1,jf2,jf3,jf4,jf5,jf6;
18 JPanel jp1,jp2,jp3;
19 JButton jb1,jb2;
20 //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口
21 public StuAddDiag(Frame owner,String title, boolean modal){
22 //调用父类方法
23 super(owner,title,modal);
24
25 jl1 = new JLabel("学号");
26 jl2 = new JLabel("名字");
27 jl3 = new JLabel("性别");
28 jl4 = new JLabel("年龄");
29 jl5 = new JLabel("籍贯");
30 jl6 = new JLabel("门派");
31
32 jf1 = new JTextField(10);
33 jf2 = new JTextField(10);
34 jf3 = new JTextField(10);
35 jf4 = new JTextField(10);
36 jf5 = new JTextField(10);
37 jf6 = new JTextField(10);
38
39 jb1 = new JButton("添加");
40 jb1.addActionListener(this);
41 jb2 = new JButton("取消");
42
43 jp1 = new JPanel();
44 jp2 = new JPanel();
45 jp3 = new JPanel();
46
47 //设置布局
48 jp1.setLayout(new GridLayout(6,1));
49 jp2.setLayout(new GridLayout(6,1));
50
51 jp3.add(jb1);
52 jp3.add(jb2);
53
54 jp1.add(jl1);
55 jp1.add(jl2);
56 jp1.add(jl3);
57 jp1.add(jl4);
58 jp1.add(jl5);
59 jp1.add(jl6);
60
61 jp2.add(jf1);
62 jp2.add(jf2);
63 jp2.add(jf3);
64 jp2.add(jf4);
65 jp2.add(jf5);
66 jp2.add(jf6);
67
68 this.add(jp1, BorderLayout.WEST);
69 this.add(jp2, BorderLayout.CENTER);
70 this.add(jp3, BorderLayout.SOUTH);
71
72 this.setSize(300,200);
73 this.setVisible(true);
74 }
75 @Override
76 public void actionPerformed(ActionEvent e) {
77 // TODO Auto-generated method stub
78 if(e.getSource() == jb1){
79 Connection ct = null;
80 PreparedStatement pstmt = null;
81 ResultSet rs = null;
82
83 try{
84 //1.加载驱动
85 Class.forName("com.mysql.jdbc.Driver");
86 System.out.println("加载成功");
87 //2.连接数据库
88 //定义几个常量
89 String url = "jdbc:mysql://localhost:3306/spdb1";
90 String user = "root";
91 String passwd = "lfdy";
92 ct = DriverManager.getConnection(url,user,passwd);
93
94 //与编译语句对象
95
96 String strsql = "insert into stu values(?,?,?,?,?,?)";
97 pstmt = ct.prepareStatement(strsql);
98
99 //给对象赋值
100 pstmt.setString(1,jf1.getText());
101 pstmt.setString(2,jf2.getText());
102 pstmt.setString(3,jf3.getText());
103 pstmt.setString(4,jf4.getText());
104 pstmt.setString(5,jf5.getText());
105 pstmt.setString(6,jf6.getText());
106
107 pstmt.executeUpdate();
108
109 this.dispose();//关闭学生对话框
110
111 }catch(Exception arg1){
112 arg1.printStackTrace();
113 }finally{
114 try{
115 if(rs!=null){
116 rs.close();
117 rs = null;
118 }
119 if(pstmt != null){
120 pstmt.close();
121 pstmt = null;
122 }
123 if(ct != null){
124 ct.close();
125 ct = null;
126 }
127 }catch(Exception arg2){
128 arg2.printStackTrace();
129 }
130 }
131
132 }
133
134 }
135
136
137 }
StuUpDiag.java:
package com.test2;
/*
* 修改学生
*/
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.*;
public class StuUpDiag extends JDialog implements ActionListener {
//定义我需要的swing组件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JTextField jf1,jf2,jf3,jf4,jf5,jf6;
JPanel jp1,jp2,jp3;
JButton jb1,jb2;
//owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口
public StuUpDiag(Frame owner,String title, boolean modal,StuModel sm,int rowNum){
//调用父类方法
super(owner,title,modal);
jl1 = new JLabel("学号");
jl2 = new JLabel("名字");
jl3 = new JLabel("性别");
jl4 = new JLabel("年龄");
jl5 = new JLabel("籍贯");
jl6 = new JLabel("门派");
jf1 = new JTextField(10);jf1.setText((sm.getValueAt(rowNum, 0)).toString());
jf2 = new JTextField(10);jf2.setText((String)sm.getValueAt(rowNum, 1));
jf3 = new JTextField(10);jf3.setText(sm.getValueAt(rowNum, 2).toString());
jf4 = new JTextField(10);jf4.setText((sm.getValueAt(rowNum, 3)).toString());
jf5 = new JTextField(10);jf5.setText((String)sm.getValueAt(rowNum, 4));
jf6 = new JTextField(10);jf6.setText((String)sm.getValueAt(rowNum, 5));
jb1 = new JButton("修改");
jb1.addActionListener(this);
jb2 = new JButton("取消");
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));
jp3.add(jb1);
jp3.add(jb2);
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);
jp2.add(jf1);
jp2.add(jf2);
jp2.add(jf3);
jp2.add(jf4);
jp2.add(jf5);
jp2.add(jf6);
this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);
this.setSize(300,200);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == jb1){
Connection ct = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载成功");
//2.连接数据库
//定义几个常量
String url = "jdbc:mysql://localhost:3306/spdb1";
String user = "root";
String passwd = "lfdy";
ct = DriverManager.getConnection(url,user,passwd);
//与编译语句对象
String strsql = "insert into stu values(?,?,?,?,?,?)";
pstmt = ct.prepareStatement(strsql);
//给对象赋值
pstmt.setString(1,jf1.getText());
pstmt.setString(2,jf2.getText());
pstmt.setString(3,jf3.getText());
pstmt.setString(4,jf4.getText());
pstmt.setString(5,jf5.getText());
pstmt.setString(6,jf6.getText());
pstmt.executeUpdate();
this.dispose();//关闭学生对话框
}catch(Exception arg1){
arg1.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs = null;
}
if(pstmt != null){
pstmt.close();
pstmt = null;
}
if(ct != null){
ct.close();
ct = null;
}
}catch(Exception arg2){
arg2.printStackTrace();
}
}
}
}
}
开发与测试结果:
1.系统主界面:
2.按名字查询:
3.选中一行,删除:
4.选中一行修改:
5.点击添加按钮,进行添加:
后续此系统将继续完善,有疑问和技术交流的,可联系本人:[email protected]
最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,…