精华内容
下载资源
问答
  • Python徒手实现识别手写数字—简易图片数据库。为了方便数据的读取与存储。我决定建立一个简单的小数据库用来存放。

    Python徒手实现识别手写数字—简易图片数据库

    写在前面

    上一篇文章Python徒手实现识别手写数字—图像的处理中我们讲了图片的处理,将图片经过剪裁,拉伸等操作以后将每一个图片变成了1x10000大小的向量。但是如果只是这样的话,我们每一次运行的时候都需要将他们计算一遍,当图片特别多的时候会消耗大量的时间。

    所以我们需要将这些向量存入一个文件当中,每次先看看图库中有没有新增的图片,如果有新增的图片,那么就将新增的图片变成1x10000向量再存入文件之中,然后从文件中读取全部图片向量即可。当图库中没有新增图片的时候,那么就直接调用文件中的图片向量进行计算就好。这样子算是节省了大量的时间。

    所以本文就是从零开始建立一个这样的图片存储管理系统。

    实现逻辑

    第一次读入图片

    我们的图库中拥有一大堆图片,每一张图片上面都是一个手写的数字,图片的名称为[数字内容]_[序号]。比如说一个图片的名称为2_3,代表这一张图片里面的数字是2,并且是“数字是2的第3张图片”。

    存在一个csv文件作为我们的建议的图片数据库,名称为Data.csv。

    首先我们读取图库中所有图片的名称,保存在fileNames中。然后读取Data.csv中所有数据。

    提取出Data.csv的最后一列(一共10002列,第10001列说明该数字是什么数字,第10002列是图片的名称),也就是数据库中存储的所有图片的名称,存储在item中。

    将新加入图库的图片名称保存在newFileNames中。如果Data.csv为空,那么就直接令newFileNames = fileNames。也就是说如果数据库中什么也没有,那么图库中所有图片都是新加入的。

    如果Data.csv不为空,那么就将item里面的内容与fileNames的内容比较,如果出现了fileNames里面有的名称item中没有,那么就将这些名称放进newFileNames中。如果item里有的名称fileNames中没有,那就不管。

    也就是说,我令我们的数据库只进不出。

    现在我们得到了新加入图库的图片的名称newFileNames。

    将newFileNames中的名称的图片带入上一文中函数GetTrainPicture进行处理,得到了一个nx10001的矩阵,每一行代表一个新加入的图片,前10000列是图片向量,第10001列是该图片的数字,保存在pic中。

    将这些图片压入到数据库的后面。

    读取之前数据库原有的图片向量,并与pic合并,得到目前拥有的所有的训练图片向量pic。

    Created with Raphaël 2.1.0图库图片名称fileNames数据库为空?全部导入newFileNames带入GetTrainPicture函数得到矩阵pic与数据库中原有数据合并压入数据库数据库图片名称item比较得到newFileNamesyesno

    以上就是本章写的所有内容,下面放出代码来详细解释一下。

    代码解析

    主文件

    import os
    import numpy as np
    import OperatePicture as OP
    import OperateDataBase as OD
    import csv
    
    ##Essential vavriable 基础变量
    #Standard size 标准大小
    N = 100
    #Gray threshold 灰度阈值
    color = 100/255
    
    #读取原CSV文件
    reader = list(csv.reader(open('DataBase.csv', encoding = 'utf-8')))
    #清除读取后的第一个空行
    del reader[0]
    #读取num目录下的所有文件名
    fileNames = os.listdir(r"./num/")
    #对比fileNames与reader,得到新增的图片newFileNames
    newFileNames = OD.NewFiles(fileNames, reader)
    print('New pictures are: 'newFileNames)
    #得到newFilesNames对应的矩阵
    pic = OP.GetTrainPicture(newFileNames)
    #将新增图片矩阵存入CSV中
    OD.SaveToCSV(pic, newFileNames)
    #将原数据库矩阵与新数据库矩阵合并
    pic = OD.Combination(reader, pic)

    我将两节内容分别封装在两个py文件里面,上一篇文章中的图片的切割与处理等所有内容我放在文件OperatePicture里面了,这一节的数据库处理放在了文件OperateDatabase里面。

    因为整个代码的逻辑我在上面已经捋过一遍了,所以我不再解释其中的内容,接下来针对每个函数开始讲解。

    OperateDatabase代码

    从上面的主文件中,我们首先用到了函数NewFiles,主要是对比fileNames和reader这两个文件中图片的名称有什么不同,返回值是新增的图片的名称的列表。下面是代码

    def NewFiles(fileNames, reader):
        '''判断是否有不同于数据库中的新文件加入'''
        #如果数据库中没有数据,则返回filenames
        if len(reader) == 0:
            return fileNames
        else:
            #从数据库中提取所有名称
            files = [item[10001] for item in reader]
            #需要加入的图片名称
            newFileNames = []
            for item in fileNames:
                #判断当前名称是否存在数据库中
                #如果不存在,则加入newFileNames
                if item not in files:
                    newFileNames.append(item)
            return newFileNames

    首先判断reader是否有内容,如果没有内容,说明是第一次执行,那么会直接把fileNames返回。否则才会进入下面进行比较。

    返回了newFileNames之后,就会把这个列表中的所有名称的图片通过GetTrainPicture函数得到一个1x10001大小的矩阵,具体过程请看我上一篇文章讲的内容。

    之后为了把新的数据存入CSV文件中,我们利用函数SaveToCSV将pic存入文件中,具体代码如下。

    def SaveToCSV(pic, fileNames):
        '''将pic与对应的dileNames存入CSV文件'''
        writer = csv.writer(open('Database.csv', 'a', newline = ''), dialect = 'excel')
        #将fileNames变为列表
        f = [item for item in fileNames]
        #每一行依次写入文件中
        for i in range(len(pic)):
            #将改行图片向量转为list
            item = pic[i].tolist()
            #将这个图片向量对应的名称f放入列表最后一个
            item.append(f[i])
            writer.writerow(item)

    当函数运行过后,会把pic矩阵对应的内容直接给续写入CSV文件中,相当于数据库操纵的写入,并不会覆盖之前原有的数据。

    之后我们需要将数据库原有的一大堆数据reader和新加进来的数据pic合并到pic里面,所以利用Combination函数将两个矩阵合并,代码如下

    def Combination(reader, pic):
        '''将两个矩阵reader与pic合并'''
        #两个矩阵的总行数
        l = len(reader) + len(pic)
        #初始化新的矩阵
        newPic = np.zeros(l*10001).reshape(l, 10001)
        #将reader最后的那个字符串名称去掉
        for item in reader:
            item.pop()
        #将reader转化为numpy的矩阵形式
        reader = np.array(reader)
        #新矩阵前半部分放reader,后半部分放pic
        if len(reader) != 0:
            newPic[0:len(reader), :] = reader
        newPic[len(reader):len(pic), :] = pic
        return newPic

    因为reader最后一行还包括了一个图片的名称,所以先利用pop将其去掉,之后转化为矩阵形式,然后再直接放入矩阵中。这个矩阵操作可能没有见过,下面我详细解释一下。

    假如我现在有一个2x3的矩阵和一个2x2的矩阵

    m = [[1 2 3]
         [4 5 6]]
    n = [[7 8]
         [9 1]]

    我可以进行如下操作

    #操作一
    m[:, 0:2] = n
    print(m)
    #操作二
    m[:, 1:3] = n
    print(m)
    
    #以下为输出结果
    #操作一
    [[7 8 3]
     [9 1 6]]
    #操作二
    [[7 7 8]
     [9 9 1]]

    可以看出操作一直接把m的第一二列给替换成n,操作二把m的第二三列替换成了n。具体过程可以百度查一下numpy的矩阵的操作,也可以自己总结规律,不细讲了。

    以上就是这一篇的全部代码。

    小结

    这一篇我相当于用CSV文件制作了一个非常简陋的数据库,能够执行的操作只有识别已有内容NewFiles与添加内容SaveToCSV,并没有插入、删改等操作。主要是我觉得这两个函数目前已经够用,因此只写了这两个操作,所以再需求已经被满足的情况下就不再拓展了。

    所有的源代码已经上传到了我的GitHub上,可以前去下载,谢谢阅读。

    如果喜欢的话麻烦点一个喜欢哦,加关注可以得到超厉害的更新提醒。

    展开全文
  • Jsp制作企业后台数据库管理系统

    千次阅读 2018-07-05 23:01:08
    ㈠、命名login.jsp 下面是我制作此表单页面的代码 表单name/id为Login登录名username,为了美观我在前面加了图片01.gif密码框possword,为了美观我在前面加了图片02.gif 提交/重置按钮,可用空格来调整他的位置我...

    一、在任何管理网站都需要的一个是登录系统登录界面,所以先制作一个登录界面。

    ㈠、

    命名login.jsp

     

    下面是我制作此表单页面的代码

     

    表单name/idLogin

    登录名username,为了美观我在前面加了图片01.gif


    密码框possword,为了美观我在前面加了图片02.gif

     

    提交/重置按钮,可用空格来调整他的位置

    我在提交/重置按钮的这个单元格里面,在它们的右边添加了“用户注册”加上超链接,当点击他时跳转到“用户注册”页面

     

    ㈡、在这个表单页面里面我加入了一个显示动态时间的一个功能,也就是能够动态的显示时间,没分每秒都在变化的。

    利用获取静态时间的方法制作动态时间效果:在之前做的项目中用到显示时间的都是一些静态的时间也就是当你进入这个网页时获取的时间,然后若想用这个静态时间的方法来实现动态时间的效果则需要将页面分为框架形式,然后将显示静态时间的js放到这个框架里面再不断的刷新这个框架才能实现动态时间的效果。

    直接利用js来实现动态时间的效果:这里我用一个div来装这个js,大部分都是用div来装这个js才能有效果

     

    代码:


    <div id="time"><script>

    document.getElementById('time').innerHTML='当前时间: '+new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());

    setInterval("document.getElementById('time').innerHTML='当前时间: '+new Date().toLocaleString()+' 星期'+'日一二三四五六'.charAt(new Date().getDay());",1000);

    </script></div>

    记得在页面顶部导入包


    ㈢、我在这个页面中加入了之前项目中的头文件,将之前的头文件head.jsp复制到项目中,然后在login.jsp头部加入 <%@include file="head.jsp" %>

     

    ㈣、在用户没有输入任何东西就点击登录时,我们给他一个弹出窗口进行提示,在这里需要加入一个js来实现。

     

    代码:    <script language=javascript>

    <!-- 

    function CheckForm(){

    if(document.Login.username.value==""){

    alert("请输入用户名!");

    document.Login.username.focus();

    return false;}

    if(document.Login.password.value == ""){

    alert("请输入密码!");

    document.Login.password.focus();

    return false;}}

    </script>

    //alert为弹出窗口时所需要显示的提示内容


    ㈤、设计数据库新建qiye.mdb

    1)建立data文件夹

         新建qiye.mdb

    2)建立表admin,表结构如下图

    输入数据

     

    在后期的增删查改可用到

    ㈥、新版本JDK没有带jdbc-odbc链接桥,如何实现链接?

    1、下载数据库链接驱动程序Access_JDBC30.jar

    2、把驱动部署到WEB-INF\lib目录下。

    刷新,能识别驱动。

     


     

    3装载驱动程序

       Class.forName("com.hxtt.sql.access.AccessDriver");

    4连接数据库

       String path="jdbc:Access:///"+getServletContext().getRealPath("/").replaceAll("\\\\", "/")+"qiye.mdb";

    //数据库路径从根文件WebContent开始算

    Connection con = DriverManager.getConnection(path);

     

    二、在完成登录页面后需要一个检查的页面

    ㈠命名为chk_login.jsp

    整体的代码

     

    首先导入数据库的包<%@page import="java.sql.*" %>,凡是有用到数据库的页面都必须导入此包

    对于数据库的操作我一起放在最下面,同时需要对数据库操作完毕后 才能对以下的页面进行连接

    三、建立一个总页面session.jsp此页面为一个大框架

     

    代码:

    此页面又三部分组成top.jsp  zb.jsp  yb.jsp三个页面

    阻止非法用户绕过登陆访问管理员页面:在用户没有登录的时候访问这个页面页面将弹出一个提示窗口然后会跳转会登录界面(要直接将session.jsp网页直接打开才看得出效果)

     

    此效果要在session.jsp中加入

    <%

    if((String)session.getAttribute("login_name")==null){

    out.println("<script LANGUAGE='javascript'>alert('请先登陆');window.location.href='login.jsp';</script>");

    return;

    }

    %>

     

    这种效果在往后的登录系统中都可以用上

    2. 分页框架top.jsp

    总体代码:

    加上某某某欢迎登录效果

     

    “企业欢迎你”字体的前面加上<%=session.getAttribute("login") %>用户,用来获取登录名

     

    “企业欢迎您”字体的后面加上图片“重新登录”加上超链接让点击他时跳转到登录界面

     

    然后再在总体的table后面加上非法阻止登录的代码(和上面的那句一样的)

     

    3. 分页框架zb.jsp


    “注册用户管理”上加上超链接点击它时跳转到regester.jsp让它在mainframe中显示,也就是在中间的框架上显示。

     

    同理在“后台用户管理”上加超链接点击时跳转到user_info.jsp

     

    四、在点击后台管理时跳转到用户后台管理系统用于浏览用户的信息

    1. 命名为user_info.jsp

     

    页面整体代码:

     


    2. 做好这个表单布局后在表单中的大表格中加入连接数据库的语句

      <%

    try{

    Class.forName("com.hxtt.sql.access.AccessDriver");

    }

    catch(ClassNotFoundException e){}

    try {

    String path="jdbc:Access:///"+getServletContext().getRealPath("/").replaceAll("\\\\", "/")+"qiye.mdb";

        Connection con = DriverManager.getConnection(path);     

    Statement sql=con.createStatement();

          ResultSet rs; //建立ResultSet(结果集)对象

          rs = sql.executeQuery("Select * from admin"); //执行SQL语句

    %>   记得导入<%@page import="java.sql.*" %>

    这个语句几乎是固定的,在往后的 数据库连接中也可以借鉴这个语句

    3. 在表格的登录名以及权限位置的下面这个表格上(也就是j0所在的单元格里)分别

     

    加入<%=rs.getString("username")%><%=rs.getString(4)%>

     

    此操作就是使用上面的ResultSet对象的rs.getString()读取数据表字段的数据,读出账号和权限放到相应的单元格。

    4.在这一行所在的单元的大表格代码上面加循环语句  <%

      while(rs.next()){

     

      int id=rs.getInt("id");

    //在列表中列出id

     

    %>

    让表格可以不断的列下去

     

    5.在后面就要把数据库给关闭了:

     <%

      }

      con.close();

      }

    catch(SQLException e1){}

      %>

      放在最外面的表格结束标签内

     

    6. 若你所做的这个user_info.jsp页面不在session页面中的中间框架中显示时可在“用户管理”后面加一个返回照片加上链接让点击它时可跳回到session页面中

     

    五、注册表单页面

    1. 命名为regester.jsp

    页面效果:

     

    整体代码:

     


    表单属性<form action="add.jsp" method="post" name="Login" target="_parent" id="Login" onSubmit="return CheckForm();">

    账号:username

    密码:password

    权限:purview,普通管理员值0,超级管理员值1

     

    2. 其实也就是将登录页面login.jsp页面改了一下,加多了一个权限列表

     

     

    3. 在提交按钮的右边像登录页面那样加“用户登录”字体,加上超链接,点击时可跳转到登录界面

     

     

    六、

    1创建一个add.jsp页面与regester.jsp对接,在注册时可把新用户添加进数据库

    1.命名add.jsp

    页面整体代码:

     


    1.基本语句和chk_login.jsp差不多,先数据库连接 然后记得加上int purview=Integer.parseInt(request.getParameter("purview"));来获取他的“权限”

     

    2. chk_login.jsp不同的是重点、难点语句:String condition="insert into admin(username,password,purview)values('"+username+"','"+password+"',"+purview+")";

    这里的瑕疵在于:注册功能的实现其实就是将用户信息添加到数据表user_info,所以可以改为*/

    //String condition="insert into user_info values('"+username+"','"+password+"',"+purview+")";

    3. 在注册时如果所注册的用户名已经存在了则需要一个弹出窗口进行提示


    点击确定按钮后重新跳转回注册页面regester.jsp页面。

    代码:  

    out.print("<script LANGUAGE='javascript'>alert('您输入的用户名已经存在!请重新输入!');window.location.href='regester.jsp';</script>");


    4.同理,如果注册成功则跳出一个窗口提示“注册成功”并且跳转到用户后台编辑页面user_info.jsp

     

     

     

     

    2把所添加的用户信息从数据库和表中删除

    1.(下面的操作在user_info中进行)

    修改user_info.jsp在循环语句后面添加获取记录id语句

    <%

      while(rs.next()){

      int id=rs.getInt("id");

    %>  (前面的user_info.jsp已经给出来了)

    在表格后面加图片“删除.png”在图片上添加链接,点击时可提交到del.jsp处理,达到删除。

    <a href="del.jsp?id=<%=id%>"><img src="imgbey/删除.png" width="30" height="30"></a>

     

    2. 创建一个del.jsp页面


    整体代码:

    前面就是数据库的连接,记得导入包就行,重点在String condition="delete from admin where id="+id;语句,这里要之前的那些语句改为“delete from”删除语句。

     

    然后就是重复前面页面上的提示窗口操作了(其实我觉得在这个加一个形式为“是否删除”-“确定”“返回” 然后当点击确定时再弹出“删除用户成功”的这种提示窗口,在后面我会努力改进一下)

     


    3修改编辑用户信息

    1.(下面的操作在user_info中进行)

    修改user_info.jsp,“修改”下面的单元格种加入图片“编辑.png

     

    再在图片上加上超链接,点击时提交给edit.jsp进行操作,在超链接标签中加入href="edit.jsp?id=<%=id%>"进行传递参数

     

    2.创建进行编辑处理的edit.jsp页面

    整体效果:

    整体代码:

    3. 首页对edit页面表单的布置(可将login.jsp登录界面或者regester.jsp注册页面复制归来进行改动一下就可以了)

     

    表单名称为:update

    <form action="Update.jsp?id=<%=rs.getInt("id")%>" method="post" name="update" target="" id="update" οnsubmit="return CheckForm();">

    增加确认密码:密码文本框,名称为password2

    然后添加js,作用为检查确认密码是否空,检查密码和确认密码是否一致。

         <script language=javascript>

    function CheckForm()

    {

    if(document.update.password.value=="")

    {

    alert("请输入密码!");

    document.update.password.focus();

    return false;

    }

    if(document.update.password2.value=="")

    {

    alert("请输入确认密码!");

    document.update.password2.focus();

    return false;

    }

    if(document.update.password.value !=document.update.password2.value)

    {

    alert("密码和确认密码不一致!");

    document.update.password2.focus();

    return false;}}</script>

     


    4. 完成edit.jsp动态部分:取出原用户数据,获取传递过来的id,连接数据库,按id查询出该用户数据,把相应的字段在相应表单中显示:

     

    这段代码最好放在表单标签的前面。

    ⑴取出用户账号,在单元格中显示出来,账号不可修改:

    <%=rs.getString("username")%>

     

     

    ⑵取出用户密码给密码密码文本框设置初始值(在第一个密码框中操作):

    <%=rs.getString("password")%>

     

     

    ⑶对管理员的身份进行判断,在权限列表中添加

    <%

      String ch1,ch2;

      if(rs.getInt("purview")==1){

      ch1="selected='selected'";

      ch2=null;

      }

      else{

      ch1=null;

      ch2="selected='selected'";

      }

     %>

     

    记得在下面的“普通管理员”“超级管理员”中给他们赋个值ch1ch2

     

    ⑷最后数据库连接关闭

    <%

    con.close();

    }

    catch(SQLException event){}

     

    %>

    在最后一个</table>前加

     

    3更新用户信息,在修改用户信息后需要在数据库中更新

    1.创建Update.jsp

     

    在后面加上一个跳转页面 out.print("<script LANGUAGE='javascript'>alert('修改用户成功');window.location.href='user_info.jsp';</script>");

     

     

    最后我们整个项目的进程近乎结尾了,下面就是我们数据库连接技术了

    七、

    以下便为数据库的连接步骤

    Sqlmysql在上面的页面中连接的方式不同)

    例如

    途中我注释了sqlmysql连接的语句,而且记得将jar放在bin

     

    八、JSP连接SQL Server

    1、登录常见问题

    如果连接不上数据库,请看服务器名称为是否为主机名加实例名SQLEXPRESS

     

    例如,我这里就要改为B40391\SQLEXPRESS才能连上

    2、验证模式

    选择服务器→属性→安全性

     

     

    服务器身份验证选择SQL ServerWindows身份验证模式

     

    设置登录名和密码选择资源管理器服务器安全性登录名→sa” 

     

    右键打开属性面板,设置登录密码,这里设置为123456。

     

    选择状态”选项设置是否允许连接到数据库引擎设置授予登录设置 启用”。

     

    3、打开SQL Server配置管理器

    SQL Server网络配置 – SQLEXPRESS的协议

     

    TCP/IP右键启用

     

    然后右键属性IP地址为127.0.0.1启用选择是

     

    IPAII设置TCP端口为1433

     

    然后重启SQL Server服务器 SQL Server服务 --  SQL Server(SQLEXPRESS)右键重新启动

     

    4、测试sa用户名是否成功:

     

    正常登录,验证设置成功。

     

    6、加载驱动。

    JDBC驱动sqljdbc42.jar下载分别放到JDK安装目录的jre/lib/ext文件夹中,和Tomcat的安装目录的lib目录下

     

    sqljdbc”sqljdbc42”粘贴到Webcontent中的WEB-INF中的lib文件夹中

     

     

     

    chk_login.jsp

    //连接mysql数据库

       /*String path="jdbc:Access:///"+getServletContext().getRealPath("/").replaceAll("\\\\", "/")+"qiye.mdb";/*获取数据库路径*/

    //数据库路径从根文件WebContent开始算

          /*Connection con = DriverManager.getConnection(path);*/注释

    然后在下面加一段Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=qiye;user=sa;password=111111");

    7、测试应用程序

    JSP连接SQL Server配置已经成功了,接下来测试是否连接成功

    测试代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%>

    <%@page import="java.sql.*" %>

    <!DOCTYPE HTML>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>test_sql</title>

    </head>

    <body>

    <%

    try{

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//加载驱动

      //Connection conn= DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=Test;user=sa;password=123456");//数据库名test,用户名sa,密码123456

      Connection conn= DriverManager.getConnection("jdbc:sqlserver://localhost;DatabaseName=qiye;user=sa;password=123456");//数据库名qiye,用户名sa,密码123456

        String sql = "select * from admin";//查询语句

       Statement stmt=conn.createStatement();

       ResultSet rs = stmt.executeQuery(sql);

    ResultSetMetaData rsMetaData = rs.getMetaData();

        int numberOfColumns = rsMetaData.getColumnCount();//获取查询结果的列数

         while(rs.next()){

         for(int i=1;i<=numberOfColumns;i++){

         out.print(rs.getString(i)+"\t");

         }

         out.print("<br>");

       }

         out.println("successful!");//连接数据库成功时输出successful!

     }catch(Exception e){

     e.printStackTrace();

     out.println("数据库驱动加载错误");

        }

    %>

    </body>

    </html>

    显示数据表的内容:

     

    则表示连接数据库成功!

     

    6. 若数据库的源添加不了

    方法一:Mdf文件和ldf文件右击-属性-安全-Authenticated Users-编辑-勾选完全控制-应用

    方法二:打开数据库实例的安装目录,打开DATA文件夹。(如我的实例目录地址为:D:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA 也可能当时安装时装在C盘了)
    将要附加的数据库.mdf文件和.ldf文件,剪切或复制到DATA文件夹里。

     

    九、JSP连接MySQL

    把mysql-connector-java-5.1.45-bin.jar下载文件复制jdk的安装目录下的jre\lib\ext的文件夹下Tomcatlib目录下。

     

     

    测试代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"

          pageEncoding="UTF-8"%>

    <%@page import="java.sql.*" %>

    <!DOCTYPE HTML>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>mysql</title>

    </head>

    <body>

    <%

    try{

         Class.forName("com.mysql.jdbc.Driver");//加载驱动

         Connection conn= DriverManager.getConnection("jdbc:mysql://localhost/world?user=root&password=123456");//数据库名world,用户名root,密码123456

         String sql = "select * from city";//查询语句

         Statement stmt=conn.createStatement();

         ResultSet rs = stmt.executeQuery(sql);

         ResultSetMetaData rsMetaData = rs.getMetaData();

        int numberOfColumns = rsMetaData.getColumnCount();//获取查询结果的列数

         while(rs.next()){

         for(int i=1;i<=numberOfColumns;i++){

         out.print(rs.getString(i)+"\t");

         }

         out.print("<br>");

         }     out.println("successful!");//连接数据库成功时输出successful!

     }catch(Exception e){

     e.printStackTrace();

        }

    %>

    </body>

    </html>

    显示successful!则表示连接数据库成功!

     

    以上便是数据库连接教程,需对应其中的页面进行操作,在这个企业后台管理项目中还可以加入分页技术,浮窗效果等等的技术,有待添加。谢谢

    展开全文
  • 下面是要做一个学生考试成绩平台。简单的一个学生成绩平台,只要是为了给老师使用,一个很简单的平台。要求:老师要能通过该平台添加学生的成绩信息。...1.数据库暂时分成两个表:学生信息表(student)、成...

    下面是要做一个学生考试成绩平台。

    简单的一个学生成绩平台,只要是为了给老师使用,一个很简单的平台。

    要求:老师要能通过该平台添加学生的成绩信息。可以根据学生姓名、考试时间、考试分数标准等来筛选学生。而且在每次考试完后、找到最近一次学生们的成绩信息,并且能够通过点击,发送到家长邮箱。

    先大概分一下流程:1.数据库的设计、2.写出伪代码、3.写代码。

    1.数据库暂时分成两个表:学生信息表(student)、成绩表(exam) ps:两表关系一对多

    student(学生表):

        

    解释一下设计当前字段的意思:

            s_id(学生ID):主键、自增不用多说。

            s_name(学生姓名):学生姓名 长度10应该足够。

         s_sex(学生性别):因为现在世界上多数还是男或者女,所以暂时限定存入  男  or  女。图片展示性别字段设计

    s_time(学生入学时间);这里就是普通的date(日期)  就可以。

    s_age(学生年龄):这里设计成为date类型,并且存的是学生的出生日期,在展示学生年龄的时候可以用当前时间减去出生日期,得到的就是当前学生的年纪,如果只是单纯的存一个int或tinyint,就成死数据了。

    email:(学生家长邮箱):比较容易理解,存个邮箱varchar30,够了。



    exam ( 成绩表 ) :


    e_id:考试结果ID。

    e_score:考试成绩,这里用tinyint就可以,长度为3(没有超过四位数的成绩)。

    e_time:考试时间。

    s_id:录入成绩的学生的ID。

    这样,数据库就暂时创建完了。


    2.接下来,顺一下流程,写一下伪代码。

        (1):学生成绩录入(本人选择的是一种一口气全部录入的方式,后边代码上会有体现)。

        (2):录入成功后,跳转展示页面。展示所有学生成绩信息。

        (3):添加搜索按钮,可以根据条件进行成绩筛选。添加发送邮箱功能,点击后可以发送邮件到对应家长邮箱。


    3.

            学生成绩信息录入:

       本人html代码直接写在了php文件里

    <?php
    header("content-type:text/html; charset=utf8");
    mysql_connect('127.0.0.1','root','root');
    mysql_select_db('exam');
    $sql="select * from student";
    $res=mysql_query($sql);
    
    while($arr=mysql_fetch_assoc($res)){
        $date[]=$arr;
    }
    //print_r($date);exit;
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="exam_add_do.php" method="post">
    <table border="1">
        <tr>
            <td>学生ID</td>
            <td>学生姓名</td>
            <td>学生成绩</td>
            <td>考试时间</td>
        </tr>
        <?php foreach($date as $k=>$v){ ?>
            <tr>
                <input type="hidden" value="<?php echo $v['s_id'];?>" name="s_id[]">
                <td><?php echo $v['s_id'];?></td>
                <td><?php echo $v['s_name'];?></td>
                <td><input type="text" name="e_score[]"></td>
                <td><input type="date" name="e_time[]"></td>
            </tr>
        <?php }?>
    </table>
        <input type="submit" value="提交" >
    </form>
    </body>
    </html>

    输出界面是:通过后边直接填写成绩和考试日期直接写入数据库。


    学生信息执行录入:

            

    <?php
    header("content-type:text/html; charset=utf8");
    
    $s_id=empty($_POST['s_id'])?'':$_POST['s_id'];
    $e_score=empty($_POST['e_score'])?'':$_POST['e_score'];
    $e_time=empty($_POST['e_time'])?'':$_POST['e_time'];
    $date['s_id']=$s_id;
    $date['e_score']=$e_score;
    $date['e_time']=$e_time;
    $arr_new = array();
    foreach($date as $item){
        foreach($item as $key=>$val){
            $arr_new[$key][] = $val;
        }
    }
    mysql_connect('127.0.0.1','root','root') or die();
    mysql_select_db('exam');
    $sql='';
    foreach($arr_new as $k=>$v){
        $sql ="insert into exam (e_score,e_time,s_id)values('$v[1]','$v[2]','$v[0]')";
        $res=mysql_query($sql);
    }
    
    if($res){
        echo "添加成功";
        header("refresh:1;url='exam_list.php'");
    }else{
        echo "添加失败";
        header("refresh:1;url='exam_add_do.php'");
    }



    展示页面展示:

    提交到本页面直接根据筛选条件查数据

    <?php
    header("content-type:text/html; charset=utf8");
    $s_name=empty($_POST['s_name'])?'':$_POST['s_name'];
    $GG=empty($_POST['GG'])?'':$_POST['GG'];
    $num=empty($_POST['num'])?'':$_POST['num'];
    
    switch($GG){
        case 1: $where=" where e_score > $num and s_name like '%$s_name%' ";break;
        case 2: $where=" where e_score = $num and s_name like '%$s_name%' ";break;
        case 3: $where=" where e_score < $num and s_name like '%$s_name%' ";break;
        default:$where=" where s_name like '%$s_name%'";
    }
    mysql_connect('127.0.0.1','root','root');
    mysql_select_db('exam');
    $sql="select * from student join exam on student.s_id=exam.s_id ".$where;
    $res=mysql_query($sql);
    while($arr=mysql_fetch_assoc($res)){
        $date[]=$arr;
    }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="exam_list.php" method="post">
    <input type="text" placeholder="学生姓名" name="s_name">
    <select name="GG">
        <option value="1"> > </option>
        <option value="2"> = </option>
        <option value="3"> < </option>
    </select>
    <select name="num">
        <?php for($i=1;$i<=100;$i++){?>
                <option value="<?php echo $i;?>"><?php echo $i;?></option>
        <?php }?>
    </select>
    <input type="submit" value="搜索">
    <table border="1">
        <tr>
            <td>学生姓名</td>
            <td>学生分数</td>
            <td>考试时间</td>
            <td>操作</td>
        </tr>
        <?php foreach($date as $k=>$v){ ?>
        <tr>
            <td><?php echo $v['s_name'];?></td>
            <td><?php echo $v['e_score'];?></td>
            <td><?php echo $v['e_time'];?></td>
            <td><a href="email.php?id=<?php echo $v['s_id'];?>&num=<?php echo $v['e_score'];?>">发送</a></td>
        </tr>
    <?php }?>
    </table>
    </form>
    
    </body>
    </html>




    添加发送邮件功能:

    本人还了一个新页面做的。

    查数据并且添加发送按钮,按钮跳转到邮箱发送类里面。

    <?php
    header("content-type:text/html; charset=utf8");
    mysql_connect('127.0.0.1','root','root');
    mysql_select_db('exam');
    $sql="select distinct s_name,e_score,e_time,email from student join exam on student.s_id=exam.s_id ";
    $res=mysql_query($sql);
    while($arr=mysql_fetch_assoc($res)){
        $date[]=$arr;
    }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="submit" value="搜索">
        <table border="1">
            <tr>
                <td>学生姓名</td>
                <td>学生分数</td>
                <td>考试时间</td>
                <td>操作</td>
            </tr>
            <?php foreach($date as $k=>$v){ ?>
                <tr>
                    <td><?php echo $v['s_name'];?></td>
                    <td><?php echo $v['e_score'];?></td>
                    <td><?php echo $v['e_time'];?></td>
                    <td><a href="email.php?id=<?php echo $v['s_id'];?>&num=<?php echo $v['e_score'];?>">发送</a></td>
                </tr>
            <?php }?>
        </table>
    </body>
    </html>


    邮箱发送类:

    <?php
    header("content-type:text/html; charset=utf8");
    
    $id=$_GET['id'];//学生ID
    $num=$_GET['num'];//学生成绩
    
    mysql_connect('127.0.0.1','root','root');
    mysql_select_db('exam');
    $sql="select * from student where s_id=".$id;
    $res=mysql_query($sql);
    
    $arr=mysql_fetch_assoc($res);
    
    
    include("class.phpmailer.php");
    include("class.smtp.php");
    $mail = new PHPMailer();
    $mail->IsSMTP(); // send via SMTP
    $mail->Host = "smtp.163.com"; // SMTP servers
    $mail->SMTPAuth = true; // turn on SMTP authentication
    $mail->Username = "此处填写发件人邮箱"; // SMTP username 注意:普通邮件认证不需要加 @域名
    $mail->Password = "自己邮箱的授权码"; // SMTP password
    $mail->From = "发件人邮箱"; 
    $mail->FromName = "老师"; // 发件人
    
    $mail->CharSet = "utf-8"; // 这里指定字符集!
    $mail->Encoding = "base64";
    $mail->AddAddress($arr['email'],$arr['s_name']); // 收件人邮箱和姓名
    //$mail->AddReplyTo("@163.com","wo");
    //$mail->WordWrap = 50; // set word wrap 换行字数
    //$mail->AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件
    //$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
    $mail->IsHTML(true); // send as HTML
    // 邮件主题
    $subject="学生成绩";
    $mail->Subject = $subject;
    // 邮件内容
    $mail->Body = "<p>你家孩子考了 $num 分</p>";
    $mail->AltBody ="text/html";
    if(!$mail->Send()) {
        echo "邮件发送有误 <p>";
        echo "邮件错误信息: " . $mail->ErrorInfo;
        exit;
    }else{
        echo "邮件发送成功!<br />";
    }


    大神请无视!!!!!!!!THINK YOU!!!!



         

    展开全文
  • **项目实战:如何制作图片的评论 即:JSP上传图片到MySQL数据库** ** 预先准备: MySQL eclipse ee mysql-connector-java-5.1.40-bin.jar包 MySQL数据库代码 ** CREATE DATABASE ImaUpdate; #DROP DATABASE ...

    **项目实战:如何制作有图片的评论

    即:JSP上传图片到MySQL数据库**

    **
    预先准备:
    MySQL
    eclipse ee
    mysql-connector-java-5.1.40-bin.jar包

    MySQL数据库代码

    **

    CREATE DATABASE ImaUpdate;
    #DROP DATABASE ImaUpdate;
    CREATE  TABLE `ImaUpdate`.`images` (  
    `id` INT NOT NULL ,  
    `content` TEXT NULL ,  
    `image` BLOB NULL ,  
    PRIMARY KEY (`id`) );
    ALTER TABLE `ImaUpdate`.`images` CONVERT TO CHARSET utf8;
    INSERT INTO `ImaUpdate`.`images` (`id`, `content`) VALUES (0, '无');
    #SHOW VARIABLES LIKE 'character%';
    

    **

    index.jsp

    **

    ## 新的改变
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
     
    <title>图片地址及评论内容传递</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    </head>
     
    <body>
    	<form method="post" action="image.jsp">
    		<input type="file" name="image" /><br /> 
    		评论:<br />
    		&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
    		<textarea name="content" rows="7"  cols="25"></textarea><br />
    		<input type="submit" value="提交"/>
    	</form>
    </body>
    </html>
    

    image.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
     
    <title>图片地址及评论内容传递</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    </head>
     
    <body>
    	<form method="post" action="image.jsp">
    		<input type="file" name="image" /><br /> 
    		评论:<br />
    		&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
    		<textarea name="content" rows="7"  cols="25"></textarea><br />
    		<input type="submit" value="提交"/>
    	</form>
    </body>
    </html>
    

    Conn.java

    package conDBMS;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    public class Conn {
    	final String MYSQLDBDRIVER = "com.mysql.jdbc.Driver";
    	final String MYSQLDBURL = "jdbc:mysql://localhost/ImaUpdate";
    	final String MYSQLDBUSER = "root";
    	final String MYSQLDBUSERPASS = "111";
     
    	public Connection getConnection() {
    		try {
    			Class.forName(MYSQLDBDRIVER);
    			Connection con = DriverManager.getConnection(MYSQLDBURL,
    					MYSQLDBUSER, MYSQLDBUSERPASS);
    			return con;
    		} catch (Exception e) {
    			e.printStackTrace();
    			return null;
    		}
    	}
    }
    

    此文借鉴于网络,原文地址:https://blog.csdn.net/LY_624/article/details/53453942
    感谢原作者的无私奉献

    展开全文
  • 数据库

    千次阅读 2015-09-19 10:10:48
    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种...
  • 实质上,本文的中心还是在讨论C#对SQL Server的增删改查,只是这次创新一点,配合Treeview制作SQL Server数据库查看器。 具体如下图: 根据SQL Server,Test数据库中的表的结构与内容: 编写一个对Test数据库...
  • 一、怎样将文件以字节流(byte[])存入数据库,在数据库中存放字节流的类型为image 如: PreparedStatement ps = CatenateDB.prepare(conn, sql); String F = src+"\\"+f; //文件路径(包含文件名) try { ...
  • 本工具是因很多网站客户的要求而制作,主要是方便将存放于Access数据库中的二进制图片转换成JPG格式,并批量导出到硬盘中。 广告:本人提供商业版和工业版的进销存贴牌加工(OEM)服务
  • NUS_WIDE数据库制作

    千次阅读 2017-11-23 20:24:43
    下面介绍一下数据库制作方法: 打开上方超链接,下载这几个文件,其中主要用到1, 2, 3;该数据库的主要信息官网上介绍的很详细,本人不再说明,打开Low_Level_Features文件夹,将下图所示
  • Hibernate向数据库插入图片

    千次阅读 2008-06-06 14:52:00
    实现功能是 用户本地浏览一个图片后(本来要用上传 为简单起见就制作本地测试) 功过Hibernate中向数据库插入图片 并在另一个页面把这个图片显示出来 index.jsp 一个简单的表单用于浏览图片Img.javapublic class Img...
  • 博客园闪存首页新随笔联系管理订阅 ...摘要:应广大API爱好者要求,写了一篇利用自己数据库标点的文章…… --------------------------------------------------------- 一、先按照前两篇文章那样,做好静态文
  • 我手里有几万张图片,请问用什么工具创建一个专门分类存储图片数据库,方便平时查询
  • 亚洲名人人脸数据库制作

    千次阅读 2019-04-12 15:34:54
    在这次大规模亚洲人脸数据制作主要是亚洲明星人脸数据集,此次我爬取了大概20万张亚洲人脸图像,可以修改爬取每位明星图片的数量来获取更多的图片,过程中主要分以下几步: 获取明星名字列表 (1)、首先从百度...
  • 制作自己图片数据集(附代码)

    万次阅读 多人点赞 2019-04-15 21:38:58
    自从入坑深度学习,一直都是用现有的数据集进行训练网络,今天想自己制作自己的数据集,因此将收集到的图片进行数据集制作。 我的图片是人眼睛的图片,平均每个人有40张图片,命名是一个人的图片名称的前几个是一样...
  • Qt存储图片数据库案例实现(转)

    千次阅读 2014-03-12 21:49:24
    Qt存储图片数据库案例实现 2011-08-30 15:10 bjst-059 互联网 字号:T | T Qt存储图片数据库案例实现是本文要介绍的内容,主要是来学习QT数据库图片的存储,具体内容的实现来看本文详解。 ...
  • php实现上传图片保存到数据库的方法。分享给大家供大家参考。...如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间。 首先图片文件是二进制数据,所以需要把二进制数据保存在mysql数
  • 图片以二进制存储到数据库

    千次阅读 2013-05-17 11:10:39
    1、建所需数据库和表,语句如下: --建立数据库 create database test --使用该数据库 use test --建立存放图片的表 create table piclist( ...2、制作上传图片的模块,代码如下: 前台html代码: http://www.w
  • DBeaver - 一款免费开源的通用数据库工具

    万次阅读 多人点赞 2019-04-30 21:58:51
    DBeaver 是一款免费开源的通用数据库管理和开发工具。DBeaver 基于 Java 开发,可以运行在各种操作系统上。通过 JDBC 连接到数据库,它可以支持几乎所有的数据库产品。还等什么,下载使用吧!
  • 很久就想自己写一写程序了,不过由于赖就不想写我,今天刚好有空,所以写了这个小小的程序很容易一看就知道的,不多说了就此开始: 我们做一个上传的。数据据库的字段就id自动编号 big 字段类型是 OLE 呵呵就简单的...
  • if ((($_FILES["doc"]["type"] == "image/gif")|| ($_FILES["doc"]["type"] == "image/jpeg")|| ($_FILES["doc"]["type"] == "image/pjpeg"))&& ($_FILES["doc"]["size"] )){ //控制允许上传的图片类型,最后的100000...
  • 桌面数据库

    2015-10-22 16:31:18
    《桌面数据库》,高效的“数据管理、表格制作、富文本编辑”操作平台,功能强劲,适用范围广,各行业均可使用。
  •  formdata=request.binaryread(formsize)'把客户发过来的数据转成二进制作  bncrlf=chrB(13) & chrB(10)  divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)  datastart=instrb(formdata,bncrlf & ...
  • 同时要将目标数据库文件夹名称ilsvrc12_train_lmdb、ilsvrc12_val_lmdb对应改成 myself_train_lmdb 、 myself_val_lmdb 。 注意!!路径绝对绝对不要写错,不然后患无穷!! 7、运行该.sh文件。如果出现...
  • 在安装过程中附加数据库时,附加错误,可是安装还是会走下去,要怎么才能让安装停止并回滚,谢谢![图片说明](https://img-ask.csdn.net/upload/201608/23/1471941569_663868.png)
  • 注意自已的图片路径 (item, index) in name" :index="index" :key="key"> <!-- <p> {{item.logo}} </p> --> export default { data() { return { name:{} } }, mounted:...
  • 上篇文章我们已经完成了图片文件上传到数据库,现在我们需要将图片文件读出并显示到网页中指定的位置。 一、新建一个JSP用于显示图片。名称了displayImg.jsp  *" pageEncoding="GB18030"%> <%...
  • 前端碰到对在一个系统遇到流程控制中需要存储在数据库存储一个签名图片的问题-一直控制不好, 今天特别关于这个问题详细看了一下.其实这个问题网上资源还是相当多的,但问题是过于凌乱 资料残缺不全 甚至我感觉其中...
  • 吴恩达 DeepLearning 第一课第二周数据库制作教程

    千次阅读 热门讨论 2018-02-01 23:23:34
    我的 DeepLearning 是在网易云那里上的课,所以没有作业,也没有一些模块文件以及训练用的数据集,所以就自己编写了数据集,对于没使用过 Python 的我当初是挺烦恼的,也很难找到一些我想需模块的使用文档。...
  • 原文地址:http://www.cnblogs.com/chenkai/archive/2010/02/03/1662542.html前端碰到对在一个系统遇到流程控制中需要存储在数据库存储一个签名图片的问题-一直控制不好, 今天特别关于这个问题详细看了一下....
  • 我用的ACCESS 数据库 做了个 产品链接 想记录这个产品浏览次数 ![图片说明](https://img-ask.csdn.net/upload/201607/10/1468090004_292513.png) 这个浏览次数 只能我在后台用手动输入,能不能实现 我初次输入后, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,922
精华内容 19,568
关键字:

如何制作自己的图片数据库