Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java EE 综合讨论区
打印话题 寄给朋友 订阅主题 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-10-22 15:46
小知识点: CSS中可以用 txt-decoration="none";去掉超连接的下划线。 更改浏览器打开时的编码为GBK可以在<head></head>标签对内加入: 模拟请求头<meta http-equiv="Content-Type" content="text/html;charset=GBK"> 2. DTD实体定义 <!ENTITY copyright SYSTEM http://www.it315.org.copyright.xml > 有SYSTEM关键子,那就表示别名对应的是xml文件的内容,否则,表示别名对应的是这个串本身。SYSTEM对应的是PUBLIC 一个表示系统,一个表示公共 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
yunshao110
发贴: 7 积分: 0 |
于 2007-10-25 07:51
太棒了 呀 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
yunshao110
发贴: 7 积分: 0 |
于 2007-10-25 07:54
太棒了 呀 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-10-25 14:21
呵呵!谢谢关注啊!!希望对你有帮助! |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-10-25 14:27
1. 重要网站 http://jakarta.apache.org 2. Tomcat服务器的配置文件(server.xml) E:\tomcat6\conf\server.xml (1)关闭tomcat元素 <Server port="8005" shutdown="SHUTDOWN">用于关闭tomcat服务器 (2)修改TOMCAT端口号 在服务器配置文件中的 <Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" /> 修改便可。 (3)要注意的问题 问题:如果在server.xml文件中加入中文,则服务器加载不起来了, 原因:是xml文件中没有设置编码 办法:第一行加入<?xml version="1.0" encoding="GB2312" ?> 当Tomcat启动出错的时候,一闪就过去了,说明在startup批处理文件中用dos的start命令启动了一个新窗口 在catalina.bat中找到下面这段代码: ======================================================== :doStart shift if not "%OS%" == "Windows_NT" goto noTitle set _EXECJAVA=start "Tomcat" %_RUNJAVA% goto gotTitle :noTitle set _EXECJAVA=start %_RUNJAVA% ========================================================= 将红色字符串删掉就可以看到错误 3. GlobalNamingResources元素 <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> 服务器端创建对象供给Servlet或JSP使用,例如数据库连接池对象 4. Service元素 <Service name="Catalina"> 5. Engine元素 <Engine name="Catalina" defaultHost="localhost"> 在一个服务器引擎上可以通过在这个元素里增加子元素<Host>来配置多个主机, 在<Host>元素中配置<Context>子元素可以增加多个站点(Web应用程序) 5. 配置一个站点(Web应用程序) <Context path="/TestApp" docBase="e:\TestApp" /> 参数path是用于浏览器访问的站点根目录 参数docBase是对应的硬盘上的物理目录 tomcat默认部署目录:tomcat/webapps/ 6. 配置元素里的斜杠问题 在配置文件里的路径不用双斜杠 java源程序中的路径用双斜杠,是用于给编译器javac的,编译器会把双斜杠转换为单斜杠 而配置文件中的路径是给虚拟机java的,会直接读取单斜杠 7. 查看端口占用情况 netstat -na 但不知道端口被谁占用 可以用ActivePort.exe软件查看 netstat -na | findstr 3306 查找指定端口有没有被占用 8. 设置默认根目录 ========================================================== 默认根目录,浏览器访问网站时,不用再写目录名 方法一: 在server.xml中加入 <Context path="" docBase="e:\TestApp" /> 方法二: 把工程放入webapps下,并一定要起名为ROOT ========================================================== 方法三: conf\Catalina\localhost\*.xml Catalina是对应的引擎,有多少个引擎,在这就有多少个目录 Localhost 对应的是站点,有多少个站点,就有多少个目录,这个目录中又有多个xml配置文件,每个配置文件都对应一个Web应用程序。 在xml文件中写入<Context docBase="e:\test">元素,虚拟目录名字属性(path)不用写,虚拟目录名就是这个xml的文件名。 方法三在tomcat5.5中操作成***,在6中不推荐使用,但是也可以根据server.xml配置文件中的引擎,站点,web应用程序结构手工写入目录文件结构 9. 将项目打成war包 打成包的项目放到webapps下面不用解压,tomcat会将项目自动解压展开 打包后会自动生成META-INF文件夹 进入要打包的文件夹:jar -cvf webcontent.war .(点代表当前目录) 或者不进入文件夹:jar -cvf webcontent.war -C webcontent . -C 代表改变目录 10. conf/web.xml通用配置文件 为所有的web应用程序进行配置,通用配置文件 配置默认网页(欢迎页面) <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> 如果没找到对应的网页则打印文件列表报错 11. 批处理实例 batch 批 @echo hehe 加@的作用是不会让echo命令显示出来 或者直接设置@echo off ,整个批处理文件就不会显示命令 变量要用双引号引起来 "%OS%" 12. 连接器 https协议支持加密,默认端口号为443 要支持https协议,需要加入连接器 在tomcat/conf/server.xml中存在一个元素:(默认被注释掉) <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> 必须为这个连接器申请一个证书,这个证书由专门的机构颁发审核 产生一个证书用JAVA_HOME/bin/keytool命令 查帮助文档,再将这个加入到连接器<Connector>元素 13. 对称加密和非对称加密 对称加密: 加密密码和解秘密密码相同 非对称加密:加密密码和解密密码不同,共钥加密的数据可以被私钥解密,私钥加密的数据也能被公钥解密,发钥的必须是个权威机构(CA) 根据要传输的数据计算出一个16位的128bit的一个数值,只要内容被改动一点,这个值就会被改变(很大的改变) 数字签名,数字证书 15. SSL会话原理 将密码进行非对称加密,SSL会话过程中的加密处理是浏览器与服务器自动完成的 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-10-26 14:21
1. 分析server.xml时得出的知识点 (1)如果在server.xml里面添加中文注释,那么用startup.bat启动服务器则会出现错误。是因为编码问题,如果文件中出现中文,则文件读取错误,因为xml默认是以unicode编码存的,添加声明<?xml version="1.0" encondin="GB2312"?>或文件另存为编码为UTF-8则启动正常。 (2)server.xml是给java执行的,所以在添盘符路径时可以不用\\来表示\,而java程序是给javac看的,编译器需要用\\来转意表示\,否则编译器会报错. 2.解决用startup.bat启动tomcat时一闪而过的办法 当用startup.bat启动tomcat时,如果server.xml配置有错误,那么startup.bat将闪一下就消失了,如果想让命令窗口停住,好方便查看错误信息,则用如下方法修改:修改catalina.bat,找到里面的: :doStart shift if not "%OS%" == "Windows_NT" goto noTitle set _EXECJAVA=start %_RUNJAVA% goto gotTitle :noTitle set _EXECJAVA=start %_RUNJAVA% :gotTitle if not ""%1"" == ""-security"" goto execCmd shift echo Using Security Manager set SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy goto execCmd 将上面set _EXECJAVA=start %_RUNJAVA% 中的start去掉,就可以让命令行出错后不消失。set _EXECJAVA=start %_RUNJAVA% 的意识是重新启动一个命令行窗口。去掉start后,则不会再重新启动窗口,就达到了使命令行停住的效果。要在命令行中启动startup.bat才能看到效果。 3. 设置网站的默认网页 在要发布的网站的WEB-INF的目录下编写web.xml. <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <welcome-file-list> <welcome-file>a.html</welcome-file> </welcome-file-list> </web-app> <welcome-file>内放如想要直接显示的页面(比如说欢迎页面),则在打开网页时,只要输入文件夹的名字,就可以自动显示网页。 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-10-28 14:17
已经在传智播客上了近2个月了,对JAVA有了更深入的了解,在日后我会把我的心得陆续的献给大家!希望大家多多的支持我 啊 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
wwww6662003
发贴: 2 积分: 0 |
于 2007-11-01 07:47
很不错,支持一下 |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-04 13:53
呵呵!谢谢大家支持我!!这俩天跟北京的同学玩了。。。昨天去的故宫!(呵,因为旺季过去了,现在才40元!)玩的很开心~~今天放假!上来看看大家!! |
作者 | Re:JAVA学习日子分享--路径问题 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-07 15:53
一、迭代一个Properties类型对象的几种方法 第一种: import java.io.*; import java.util.Enumeration; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ReadProp extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties p = new Properties(); p.load(is); is.close(); Enumeration e = p.elements(); while(e.hasMoreElements()) { String key = (String)e.nextElement(); out.println(key + "<br>"); } out.flush(); out.close(); } } 第二种: Enumeration e1 = p.propertyNames(); while(e1.hasMoreElements()) { String key = (String)e1.nextElement(); out.println(key + ":" + p.getProperty(key) + "<br>"); } 第三种: Enumeration e = p.keys(); while(e.hasMoreElements()) { String key = (String)e.nextElement(); out.println(key + ":" + p.getProperty(key) + "<br>"); } 第四种: Set set = p.keySet(); Iterator it = set.iterator(); while(it.hasNext()) { String key = (String)it.next(); out.println(key + "=======" + p.getProperty(key) + "<br>"); } 第五种 Set set = p.entrySet(); Iterator it = set.iterator(); while(it.hasNext()) { Map.Entry entry = (Entry) it.next(); out.println(entry.getKey() + ":::::" + entry.getValue() + "<br>"); } 二、一个显示所有访问者的IP及访问次数的Servlet 运用的知识点如下: 1、存储IP使用什么类型比较好?这个变量定义在哪里比较好? 2、复习了HashMap的迭代知识 代码如下: 用HashMap统计IP的访问次数 import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class IpList extends HttpServlet { private Map map = new HashMap(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String ip = request.getRemoteAddr(); int time = 0; if(map.containsKey(ip)) { time = Integer.parseInt((String) map.get(ip)); } time++; map.put(ip, Integer.valueOf(time).toString()); Set ipset = map.keySet(); Iterator iter = ipset.iterator(); while(iter.hasNext()) { String ip1 = (String)iter.next(); out.println(ip1 + ":" + map.get(ip1) + "<br>"); } out.flush(); out.close(); } } 三、servlet的线程安全问题 servlet是多线程的,所以有多个线程访问同一个对象时要考虑线程安全。 import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ServletThread extends HttpServlet { private int count = 0; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { synchronized (this) { count++; try { Thread.sleep(500); } catch (Exception e) { // TODO: handle exception } System.out.println(count + "访问" + Thread.currentThread()); } } } http://www.itcast.cn |
作者 | JSP乱码和out内置对象 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-08 09:33
一、深入out对象(张老师(深入JAVA web开发内幕)书P241) 1、getOutputStream 返回ServletOutputStream类型的out对象,属于字节输出流 2、getWriter 返回PrintWriter类型的对象,属于字符输出流 切记:同一个servlet程序向客户端输出内容时,只能选其一使用,不可同时都用。 两种头字段 Content-Length:n 向客户端输出前知道内容的大小 Transfer-Encoding:chunked 以下两种情况会出现: A、输出的内容刚好装满缓冲区 B、手工执行过刷新(flush)操作 3. 案例 案例1:实现动态文件下载 Response.setContentType("application/x-msdownload"); Response.addHeader("Content-Disposition", "attachment;filename=xx.ext"); 使用两种类型的out对象都可以实现文本类型的文件下载; 但其它二进制文件只能使用ServletOutputStream类型的out对象来输出文件内容。 案例2:输出图片 Response.setContentType("image/jpeg"); //显示图片 要实现图片下载,头字段的设置还是 Response.setContentType("application/x-msdownload"); Response.addHeader("Content-Disposition”, “attachment;filename=xx.jpg"); 4、JSP内置的out对象 属于JspWriter类型的对象 (1)弄清缓冲区的概念,它对out对象输出内容顺序的影响(和printwriter比较) Printwriter先输出,out对象后输出 (2)弄清回车换行对jsp执行的影响 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.getRequestDispatcher("input.html").forward(request, response); /*转发到静态资源会出错,因为先执行这句代码后,系统默认用outputstream输出静态页,而最后jsp的out对象最后输出换行和回车时,又要调用writer,所以会出错。 */ response.sendRedirect("/Test/input.html"); //不会出错 %> 下面是servlet里面的代码,不会出错 PrintWriter out = response.getWriter(); out.print("wrong!"); request.getRequestDispatcher("input.html").forward(request,response); 原因在于defaultservlet内部输出的时候会先判断是否调用过response.getWriter(), 如果已经调用过,就直接用PrintWriter来输出 二、中文输出问题 设置页面发送的编码要在定义的输出流前面 1、Servlet的中文输出问题: response.setLocale(new java.util.Locale("zh", "CN")); //在tomcat5下无效 response.setCharacterEncoding("gb2312");//设置PrintWriter的编码 response.setContentType("text/html;charset=utf-8");//可增加Content-Type头字段 2、HTML静态页面中文输出问题: <meta http-equiv="content-type" contentType="text/html; charset=GB18030"> 注意:charset=GB18030最好和文件的编码一致 3、下载文本文件输出中文问题: response.setContentType("application/x-msdownload;charset=gb2312"); //方法一 response.addHeader("Content-Disposition",attachment;filename=x.txt"); //response.setCharacterEncoding("gb2312"); //方法二 PrintWriter out = response.getWriter(); out.print("中国人民"); 4、传参时的中文问题: (1) get方式提交 String name = request.getParameter("name"); name = new String(name.getBytes("iso8859-1"), "gb2312"); //对get和post方式都有效,并且get方式必须用此方法 配置server.xml文件的Connector元素 <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 添加两个属性 useBodyEncodingForURI="true",可以按照post方式处理 或者URIEncoding="gb2312",可以直接request.getParameter("name")而不会有问题 但不建议大家使用,因为移植到另一个服务器这些参数可能并不提供了. (2)post方式提交 request.setCharacterEncoding("gb2312"); //只对实体内容有效,也就是只对post方式提交有效 String name = request.getParameter("name"); 5、jsp文件的中文输出问题: <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> 注意这个参数很有作用, 1) 可以设置文件的编码 2) 可以设置输出内容的Content-Type 3) 修改以后文件的存储编码也跟着改变 http://www.itcast.cn |
作者 | Re:JAVA学习日子分享--路径问题 [Re:fhdking] |
JJ_JJ
发贴: 0 积分: 0 |
于 2007-11-09 01:23
学习java的日子怎么能少了 http://www.java2s.com 的帮忙!超级好用得好站!看了就知道啦! |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-09 17:57
呵呵!谢谢楼上的分享!让我们一起努力吧!!! http://www.itcast.cn 这里也有好多资料可以供大家下载哟! |
作者 | include和forward方法 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-12 10:21
一、include方法 正常 request.getRequestDispatcher("chinese.html").include(request, response); 正常 response.setContentType("text/html;charset=gb18030"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("chinese.html").include(request, response); 出乱码 PrintWriter out = response.getWriter(); request.getRequestDispatcher("chinese.html").include(request, response); 因为使用了PrintWrite但没有设置编码格式,导致页面的编码方式与服务器响应的编码格式不一致。 抛出异常 response.setContentType("text/html;charset=gb18030"); request.getRequestDispatcher("chinese.html").include(request, response); PrintWriter out = response.getWriter(); out.println("包含"); 因为include方法使用的是getOutputStream方法,下面的语句又使用了getWriter()方法,而在一个servlet程序中只能有一个输出方法,所以抛异常. 二、forward方法 下面的代码导致异常发生 response.setContentType("text/html;charset=gb18030"); PrintWriter out = response.getWriter(); out.println("前"); out.flush(); //导致异常发生 request.getRequestDispatcher("chinese.html").forward(request, response); Forward方法前后的输出都会被忽略,如下代码的"前"和"后"都不会被输出 response.setContentType("text/html;charset=gb18030"); PrintWriter out = response.getWriter(); out.println("前"); request.getRequestDispatcher("chinese.html").forward(request, response); out.println("后"); Forward方法双方的响应头都会有效 response.addDateHeader("Expires", 0); //设置了Expires响应头 request.getRequestDispatcher("chinese.html").forward(request, response); //设置了Content-Type响应头 如下代码没有问题 response.setContentType("text/html;charset=utf-8"); //response.setContentType("text/html;charset=gb18030"); PrintWriter out = response.getWriter(); request.getRequestDispatcher("chinese.html").forward(request, response); 中文显示有问题 //当前chinese.html的编码是gb18030 response.setContentType("text/html;charset=utf-8"); request.getRequestDispatcher("chinese.html").forward(request, response); 中文显示没有问题 //当前chinese.html的编码是utf-8 response.setContentType("text/html;charset=utf-8"); request.getRequestDispatcher("chinese.html").forward(request, response); 三、URL的编码问题(张老师java web开发内幕一书P361) 处理参数的servlet代码如下: String name = request.getParameter("name"); name = new String(name.getBytes("iso8859-1"), "GB2312"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println(name); 1、浏览器的地址栏直接传中文参数:没有问题 http://localhost:8080/Test/ChineseReceive?name=中国 2、通过请求转发传参:出现问题 request.getRequestDispatcher("ChineseReceive?name=中国").forward(request, response); 解决方法: request.getRequestDispatcher("ChineseReceive?name=" + java.net.URLEncoder.encode("中国", "gb2312")).forward(request, response); 3、通过请求重定向传参:出现问题 response.sendRedirect("ChineseReceive?name=中国"); 解决方法: response.sendRedirect("ChineseReceive?name=" + java.net.URLEncoder.encode("中国", "gb2312")); 四、各种传递参数的表单元素 <form name="f1" id="f1" action="" method="get"> text name1:<input type="text" name="name" value="zhangsan"><br> name2:<textarea rows="5" cols="80" name="info"></textarea><br> checkbox <input type="checkbox" name="favor" value="swim">swim<br> <input type="checkbox" name="favor" value="read">read<br> radio <input type="radio" name="sex" value="male">male<br> <input type="radio" name="sex" value="female">female<br> hidden <input type="hidden" name="hid" value="iii"><br> select <select name="source" multiple> <option>1</option> <option selected>2</option> <option selected>3</option> </select><br> button <input type="button" name="btn" value="button1"><br> <input type="submit" name="btn" value="submit1"><br> <input type="submit" name="btn" value="submit2"><br> <input type="reset"> </form> |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
王勇
发贴: 6 积分: 0 |
于 2007-11-17 18:05
好厉害啊,这么多啊.是不是觉得很累啊. |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-19 15:06
呵呵!累是累啊!可是来参加培训!不是学的越多越好么!要不以后出去找不到工作!那可就真累了!! |
作者 | Re:JAVA学习日子分享 [Re:fhdking] |
fhdking
发贴: 28 积分: 0 |
于 2007-11-19 15:17
培训第十五天,Mysql第一天: 一 . 安装与配置MYSQL 二 . 常用mysql命令行命令 1 .mysql的启动与停止 启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2 . netstat –na | findstr 3306 查看被监听的端口 , findstr用于查找后面的端口是否存在 3 . 在命令行中登陆MYSQL控制台 , 即使用 MYSQL COMMEND LINE TOOL 语法格式 mysql –user=root –password=123456 db_name 或 mysql –uroot –p123456 db_name 4 . 进入MYSQL命令行工具后 , 使用status; 或\s 查看运行环境信息 5 . 切换连接数据库的语法 : use new_dbname; 6 . 显示所有数据库 : show databases; 7 . 显示数据库中的所有表 : show tables; 8 . 显示某个表创建时的全部信息 : show create table table_name; 9 . 查看表的具体属性信息及表中各字段的描述 Describe table_name; 缩写形式 : desc table_name; 三 。 MySql中的SQL语句 1 . 数据库创建 : Create database db_name; 数据库删除 : Drop database db_name; 删除时可先判断是否存在,写成 : drop database if exits db_name 2 . 建表 : 创建数据表的语法 : create table table_name (字段1 数据类型 , 字段2 数据类型); 例 : create table mytable (id int , username char(20)); 删表 : drop table table_name; 例 : drop table mytable; 8 . 添加数据 : Insert into 表名 [(字段1 , 字段2 , ….)] values (值1 , 值2 , …..); 如果向表中的每个字段都插入一个值,那么前面 [ ] 括号内字段名可写也可不写 例 : insert into mytable (id,username) values (1,’zhangsan’); 9 . 查询 : 查询所有数据 : select * from table_name; 查询指定字段的数据 : select 字段1 , 字段2 from table_name; 例 : select id,username from mytable where id=1 order by desc;多表查询语句------------参照第17条实例 10 . 更新指定数据 , 更新某一个字段的数据(注意,不是更新字段的名字) Update table_name set 字段名=’新值’ [, 字段2 =’新值’ , …..][where id=id_num] [order by 字段 顺序] 例 : update mytable set username=’lisi’ where id=1; Order语句是查询的顺序 , 如 : order by id desc(或asc) , 顺序有两种 : desc倒序(100—1,即从最新数据往后查询),asc(从1-100),Where和order语句也可用于查询select 与删除delete 11 . 删除表中的信息 : 删除整个表中的信息 : delete from table_name; 删除表中指定条件的语句 : delete from table_name where 条件语句 ; 条件语句如 : id=3; 12 . 创建数据库用户 一次可以创建多个数据库用户如: CREATE USER username1 identified BY ‘password’ , username2 IDENTIFIED BY ‘password’…. 13 . 用户的权限控制:grant 库,表级的权限控制 : 将某个库中的某个表的控制权赋予某个用户 Grant all ON db_name.table_name TO user_name [ indentified by ‘password’ ]; 14 . 表结构的修改 (1)增加一个字段格式: alter table table_name add column (字段名 字段类型); ----此方法带括号 (2)指定字段插入的位置: alter table table_name add column 字段名 字段类型 after 某字段; 删除一个字段: alter table table_name drop字段名; (3)修改字段名称/类型 alter table table_name change 旧字段名 新字段名 新字段的类型; (4)改表的名字 alter table table_name rename to new_table_name; (5)一次性清空表中的所有数据 truncate table table_name; 此方法也会使表中的取号器(ID)从1开始 15 . 增加主键,外键,约束,索引。。。。(使用方法见17实例) ① 约束(主键Primary key、唯一性Unique、非空Not Null) ② 自动增张 auto_increment ③外键Foreign key-----与reference table_name(col_name列名)配合使用,建表时单独使用 ④ 删除多个表中有关联的数据----设置foreign key 为set null ---具体设置参考帮助文档 16 . 查看数据库当前引擎 SHOW CREATE TABLE table_name; 修改数据库引擎 ALTER TABLE table_name ENGINE=MyISAM | InnoDB; 17 . SQL语句运用实例: --1 建users表 create table users (id int primary key auto_increment,nikename varchar(20) not null unique,password varchar(100) not null,address varchar(200), reg_date timestamp not null default CURRENT_TIMESTAMP); --2 建articles表,在建表时设置外键 create table articles (id int primary key auto_increment,content longtext not null,userid int,constraint foreign key (userid) references users(id) on delete set null); ----------------------------------------------------------------------- --2.1 建articles表,建表时不设置外键 create table articles (id int primary key auto_increment,content longtext not null,userid int); --2.2 给articles表设置外键 alter table articles add constraint foreign key (userid) references users(id) on delete set null; ------------------------------------------------------------------------ --3. 向users表中插入数据,同时插入多条 insert into users (id,nikename,password,address) values (1,'lyh1','1234',null),(10,'lyh22','4321','湖北武汉'),(null,'lyh333','5678','北京海淀'); --4. 向article中插入三条数据 insert into articles (id,content,userid) values (2,'hahahahahaha',11),(null,'xixixixixix',10),(13,'aiaiaiaiaiaiaiaiaiaiaiaia',1),(14,'hohoahaoaoooooooooo',10); --5. 进行多表查询,选择users表中ID=10的用户发布的所有留言及该用户的所有信息 select articles.id,articles.content,users.* from users,articles where users.id=10 and articles.userid=users.id order by articles.id desc; --6. 查看数据库引擎类型 show create table users; --7. 修改数据库引擎类型 alter table users engine=MyISAM; ---因为users表中ID被设置成外键,执行此句会出错 --8. 同表查询,已知一个条件的情况下.查询ID号大于用户lyh1的ID号的所有用户 select a.id,a.nikename,a.address from users a,users b where b.nikename='lyh1' and a.id>b.id; ------也可写成 select id,nikename,address from users where id>(select id from users where nikename='lyh1'); 9. 显示年龄比领导还大的员工: select a.name from users a,users b where a.managerid=b.id and a.age>b.age; 查询编号为2的发帖人: 先查articles表,得到发帖人的编号,再根据编号查users得到的用户名。 接着用关联查询. select * from articles,users得到笛卡儿积,再加order by articles.id以便观察 使用select * from articles,users where articles.id=2 筛选出2号帖子与每个用户的组合记录 再使用select * from articles,users where articles.id=2 and articles.userid=users.id选出users.id等于2号帖的发帖人id的记录. 只取用户名:select user where user.id=(select userid from articles where article.id =2) 找出年龄比小王还大的人:假设小王是28岁,先想找出年龄大于28的人 select * from users where age>(select age from users where name='xiaowang'); *****要查询的记录需要参照表里面的其他记录: select a.name from users a,users b where b.name='xiaowang' and a.age>b.age 表里的每个用户都想pk一下.select a.nickname,b.nickname from users a,users b where a.id>b.id ; 更保险的语句:select a.nickname,b.nickname from (select * from users order by id) a,(se lect * from users order by id) b where a.id>b.id ; 再查询某个人发的所有帖子. select b.* from articles a , articles b where a.id=2 and a.userid=b.userid 说明: 表之间存在着关系,ER概念的解释,用access中的示例数据库演示表之间的关系.只有innodb引擎才支持foreign key,mysql的任何引擎目前都不支持check约束。 四、字符集出现错误解决办法 出现的问题: mysql> update users -> set username='关羽' -> where userid=2; ERROR 1366 (HY000): Incorrect string value: '\xB9\xD8\xD3\xF0' for column 'usern ame' at row 1 向表中插入中文字符时,出现错误。 mysql> select * from users; +--------+----------+ | userid | username | +--------+----------+ | 2 | ???? | | 3 | ???? | | 4 | ?í?ù | +--------+----------+ 3 rows in set (0.00 sec) 表中的中文字符位乱码。 解决办法: 使用命令: mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.45, for Win32 (ia32) Connection id: 8 Current database: test Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.45-community-nt MySQL Community Edition (GPL) Protocol version: 10 Connection: localhost via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: gbk Conn. characterset: gbk TCP port: 3306 Uptime: 7 hours 39 min 19 sec Threads: 2 Questions: 174 Slow queries: 0 Opens: 57 Flush tables: 1 Open ta bles: 1 Queries per second avg: 0.006 -------------- 查看mysql发现Server characterset,Db characterset的字符集设成了latin1,所以出现中文乱码。 mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | users | +----------------+ 1 row in set (0.00 sec) 更改表的字符集。 mysql> alter table users character set GBK; Query OK, 3 rows affected (0.08 sec) Records: 3 Duplicates: 0 Warnings: 0 查看表的结构: mysql> show create users; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'users ' at line 1 mysql> show create table users; +-------+----------------------------------------------------------------------- ------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------- ------------------------------------------------------------------------------+ | users | CREATE TABLE `users` ( `userid` int(11) default NULL, `username` char(20) character set latin1 default NULL ) ENGINE=InnoDB DEFAULT CHARSET=gbk | +-------+----------------------------------------------------------------------- ------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> desc users; +----------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+----------+------+-----+---------+-------+ | userid | int(11) | YES | | NULL | | | username | char(20) | YES | | NULL | | +----------+----------+------+-----+---------+-------+ 2 rows in set (0.02 sec) 这时向表中插入中文然后有错误。 mysql> insert into users values(88,'中文'); ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column 'usern ame' at row 1 mysql> insert into users values(88,'中文'); ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column 'usern ame' at row 1 还要更改users表的username的字符集。 mysql> alter table users modify username char(20) character set gbk; ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern ame' at row 1 mysql> alter table users modify username char(20) character set gbk; ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'usern ame' at row 1 因为表中已经有数据,所以更改username字符集的操作没有成*** 清空users表中的数据 mysql> truncate table users; Query OK, 3 rows affected (0.01 sec) 从新更改user表中username的字符集 mysql> alter table users modify username char(20) character set gbk; Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0 这时再插入中文字符,插入成***。 mysql> insert into users values(88,'中文'); Query OK, 1 row affected (0.01 sec) mysql> select * from users; +--------+----------+ | userid | username | +--------+----------+ | 88 | 中文 | +--------+----------+ 1 row in set (0.00 sec) mysql> 北京传智播客http://www.itcast.cn |
|
已读帖子 新的帖子 被删除的帖子 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |