Mysql中CAPI的学生信息管理


使用嵌入式MySQL服务器库,能够在客户端应用程序中使用具备全部特性的MySQL服务器。
主要优点在于,增加了速度,并使得嵌入式应用程序的管理更简单。
嵌入式服务器库是以MySQL的客户端/服务器版本为基础的,采用C/C++语言编写。
其结果是嵌入式服务器也是用C/C++语言编写的。
在其他语言中,嵌入式服务器不可用。
API与嵌入式MySQL版本和客户端/服务器版本等效。
要想更改旧的线程式应用程序以使用嵌入式库,正常情况下,仅需添加对下述函数的调用即可。
与MySQL交互时,应用程序应使用该一般性原则:

  1. 通过调用mysql_library_init(),初始化MySQL库。库可以是mysqlclient
    C客户端库,或mysqld嵌入式服务器库,具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。
    2.
    通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。
    3.
    发出SQL语句并处理其结果。(在下面的讨论中,详细介绍了使用它的方法)。
  2. 通过调用mysql_close(),关闭与MySQL服务器的连接。
  3. 通过调用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.系统主界面:

图片 1

2.按名字查询:

图片 2

3.选中一行,删除:

图片 3

4.选中一行修改:

图片 4

5.点击添加按钮,进行添加:

图片 5

 

 后续此系统将继续完善,有疑问和技术交流的,可联系本人:[email protected]

 

最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,…

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章