首先这是网络打印工具类,通过Socket实现,多说一句,网络打印机端口号一般默认的是9100

package com.Ieasy.Tool;

import android.annotation.SuppressLint;
import java.io.IOException ;
import java.io.OutputStream ;
import java.io.PrintWriter ;
import java.net.InetSocketAddress ;
import java.net.Socket ;
import java.net.SocketAddress ;
import java.nio.charset.Charset ; @SuppressLint("NewApi")
public class NetPrinter
{
public Socket socket; public int POS_OPEN_NETPORT = 9100;// 0X238c
public boolean IFOpen = false;
public int Net_SendTimeout = 1000;
public int Net_ReceiveTimeout = 1500;
public String command = ""; //打印命令字符串
public byte[] outbytes; //传输的命令集 PrinterCMD pcmd = new PrinterCMD(); /// <summary>
/// 网络打印机 打开网络打印机
/// </summary>
/// <param name="ipaddress"></param>
/// <returns></returns>
public boolean Open(String ipaddress, int netport)
{
if (socket == null)
{
try
{
SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
socket = new Socket(); //Socket(ipaddress, netport,true);
socket.connect(ipe);
socket.setSoTimeout(Net_ReceiveTimeout);
//socket.SendTimeout = Net_SendTimeout;
IFOpen = true;
//System.out.print("连接成功");
}
catch(Exception e)
{
//MessageBox.Show("连接不成功");
e.printStackTrace();
IFOpen = false;
}
}
else
{
try
{
socket.close();
SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
socket = new Socket(); //Socket(ipaddress, netport,true);
socket.connect(ipe);
socket.setSoTimeout(Net_ReceiveTimeout);
//socket.SendTimeout = Net_SendTimeout;
IFOpen = true;
}
catch(Exception e)
{
e.printStackTrace();
IFOpen = false;
}
}
return IFOpen;
} /// <summary>
/// 网络打印机 关闭
/// </summary>
/// <param name="ipaddress"></param>
/// <returns></returns>
public void Close()
{
try
{
socket.close();
socket = null;
}
catch(Exception e)
{
e.printStackTrace();
}
} /// <summary>
/// 网络打印机 初始化打印机
/// </summary>
public void Set()
{
try
{
command = pcmd.CMD_SetPos();
OutputStream stream = socket.getOutputStream();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /// <summary>
/// 网络打印机 打印的文本
/// </summary>
/// <param name="pszString"></param>
/// <param name="nFontAlign">0:居左 1:居中 2:居右</param>
/// <param name="nfontsize">字体大小0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
/// <param name="ifzhenda">0:非针打 1:针打</param>
public void PrintText(String pszString, int nFontAlign, int nFontSize,int ifzhenda)
{
try
{
OutputStream stream = socket.getOutputStream();
command = pcmd.CMD_TextAlign(nFontAlign);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); if (ifzhenda == 1)
{
command = pcmd.CMD_FontSize_BTP_M280(nFontSize);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_FontSize_BTP_M2801(nFontSize);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
else
{
command = pcmd.CMD_FontSize(nFontSize);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
} command = pszString;// +CMD_Enter();
outbytes = command.getBytes(Charset.forName("GB2312")); //Charset.defaultCharset()); //forName("UTF-8")
stream.write(outbytes);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return;
} } /// <summary>
/// 网络打印机 回车
/// </summary>
public void PrintEnter()
{
try
{
command = pcmd.CMD_Enter();
OutputStream stream = socket.getOutputStream();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /// <summary>
/// 网络打印机 切割
/// </summary>
/// <param name="pagenum">切割时,走纸行数</param>
public void CutPage(int pagenum)
{
try
{
OutputStream stream = socket.getOutputStream(); command = pcmd.CMD_PageGO(pagenum) + pcmd.CMD_Enter();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_CutPage() + pcmd.CMD_Enter();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); }
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /// <summary>
/// 网络打印机换行
/// </summary>
/// <param name="lines"></param>
public void PrintNewLines(int lines)
{
try
{
OutputStream stream = socket.getOutputStream(); command = pcmd.CMD_FontSize(0);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
for (int i = 0; i < lines; i++)
{
command = "" + pcmd.CMD_Enter();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /// <summary>
/// 打开钱箱
/// </summary>
public void OpenQianXiang()
{
try
{
OutputStream stream = socket.getOutputStream();
command = "" + pcmd.CMC_QianXiang();
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} /// <summary>
/// 打印条码
/// </summary>
/// <param name="numstr"></param>
/// <param name="height"></param>
/// <param name="width"></param>
/// <param name="numweizi">1:上方 2:下方 0:不打印数字</param>
/// <param name="fontalign">0:居左 1:居中 2:居右</param>
/// <param name="fontsize">字体大小0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
public void PrintTiaoMa(String numstr, int height, int width, int numweizi, int fontalign, int fontsize)
{
try
{
OutputStream stream = socket.getOutputStream();
command = pcmd.CMD_TiaoMaHeight(height);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_TiaoMaWidth(width);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_TiaoMaWeiZi(numweizi);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_TextAlign(fontalign);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_FontSize(fontsize);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes); command = pcmd.CMD_TiaoMaPrint(numstr);
outbytes = command.getBytes(Charset.forName("ASCII"));
stream.write(outbytes);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} class PrinterCMD
{
/// <summary>
/// 初始化打印机
/// </summary>
/// <returns></returns>
public String CMD_SetPos()
{
return new StringBuffer().append((char)27).append((char)64).toString();
} /// <summary>
/// 换行(回车)
/// </summary>
/// <returns></returns>
public String CMD_Enter()
{
return new StringBuffer().append((char)10).toString();
} /// <summary>
/// 对齐模式
/// </summary>
/// <param name="align">0:左对齐 1:中对齐 2:右对齐</param>
/// <returns></returns>
public String CMD_TextAlign(int align)
{
return new StringBuffer().append((char)27).append((char)97).append((char)align).toString();
} /// <summary>
/// 字体的大小
/// </summary>
/// <param name="nfontsize">0:正常大小 1:两倍高 2:两倍宽 3:两倍大小 4:三倍高 5:三倍宽 6:三倍大小 7:四倍高 8:四倍宽 9:四倍大小 10:五倍高 11:五倍宽 12:五倍大小</param>
/// <returns></returns>
public String CMD_FontSize(int nfontsize)
{
String _cmdstr = ""; //设置字体大小
switch (nfontsize)
{
case -1:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
break; case 0:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
break; case 1:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)1).toString();
break; case 2:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)16).toString();
break; case 3:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)17).toString();
break; case 4:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)2).toString();
break; case 5:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)32).toString();
break; case 6:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)34).toString();
break; case 7:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)3).toString();
break; case 8:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)48).toString();
break; case 9:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)51).toString();
break; case 10:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)4).toString();
break; case 11:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)64).toString();
break; case 12:
_cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)68).toString();
break; }
return _cmdstr;
} /// <summary>
/// BTP-M280(针打) 倍宽倍高
/// </summary>
/// <param name="size">0:取消倍宽倍高模式 1:倍高模式 2:倍宽模式 3:两倍大小</param>
/// <returns></returns>
public String CMD_FontSize_BTP_M280(int size)
{
String _cmdstr = "";
//只有0和1两种模式
int fontsize = size; switch (fontsize)
{
case 1:
_cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)8).toString();
break;
case 2:
_cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)4).toString();
break;
case 3:
_cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)1).toString();
break;
default:
_cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)0).toString();
break;
} return _cmdstr;
} /// <summary>
/// BTP-M280(针打) 倍宽倍高
/// </summary>
/// <param name="size">0:取消倍宽倍高模式 1:倍高模式 2:倍宽模式 3:两倍大小</param>
/// <returns></returns>
public String CMD_FontSize_BTP_M2801(int size)
{
String _cmdstr = "";
//只有0和1两种模式
int fontsize = size; switch (fontsize)
{
case 1:
_cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)17).toString();
break;
case 2:
_cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)33).toString();
break;
case 3:
_cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)49).toString();
break;
default:
_cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)1).toString();
break;
} return _cmdstr;
} /// <summary>
/// 走纸
/// </summary>
/// <param name="line">走纸的行数</param>
/// <returns></returns>
public String CMD_PageGO(int line)
{
return new StringBuffer().append((char)27).append((char)100).append((char)line).toString();
} /// <summary>
/// 切割
/// </summary>
/// <returns></returns>
public String CMD_CutPage()
{
return new StringBuffer().append((char)27).append((char)109).toString();
} /// <summary>
/// 返回状态(返回8位的二进制)
/// </summary>
/// <param name="num">1:打印机状态 2:脱机状态 3:错误状态 4:传送纸状态</param>
/// 返回打印机状态如下:
/// 第一位:固定为0
/// 第二位:固定为1
/// 第三位:0:一个或两个钱箱打开 1:两个钱箱都关闭
/// 第四位:0:联机 1:脱机
/// 第五位:固定为1
/// 第六位:未定义
/// 第七位:未定义
/// 第八位:固定为0
///
/// 返回脱机状态如下:
/// 第一位:固定为0
/// 第二位:固定为1
/// 第三位:0:上盖关 1:上盖开
/// 第四位:0:未按走纸键 1:按下走纸键
/// 第五位:固定为1
/// 第六位:0:打印机不缺纸 1: 打印机缺纸
/// 第七位:0:没有出错情况 1:有错误情况
/// 第八位:固定为0
///
/// 返回错误状态如下:
/// 第一位:固定为0
/// 第二位:固定为1
/// 第三位:未定义
/// 第四位:0:切刀无错误 1:切刀有错误
/// 第五位:固定为1
/// 第六位:0:无不可恢复错误 1: 有不可恢复错误
/// 第七位:0:打印头温度和电压正常 1:打印头温度或电压超出范围
/// 第八位:固定为0
///
/// 返回传送纸状态如下:
/// 第一位:固定为0
/// 第二位:固定为1
/// 第三位:0:有纸 1:纸将尽
/// 第四位:0:有纸 1:纸将尽
/// 第五位:固定为1
/// 第六位:0:有纸 1:纸尽
/// 第七位:0:有纸 1:纸尽
/// 第八位:固定为0
/// <returns></returns>
public String CMD_ReturnStatus(int num)
{
return new StringBuffer().append((char)16).append((char)4).append((char)num).toString();
} /// <summary>
/// 条码高宽
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public String CMD_TiaoMaHeight(int num)
{
//return ((char)29).append"h" + ((char)num).toString();
return new StringBuffer().append((char)29).append((char)104).append((char)num).toString();
} /// <summary>
/// 条码宽度
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public String CMD_TiaoMaWidth(int num)
{
//return ((char)29).append"w" + ((char)num).toString();
return new StringBuffer().append((char)29).append((char)119).append((char)num).toString();
} /// <summary>
/// 条码数字打印的位置
/// </summary>
/// <param name="num">1:上方 2:下方 0:不打印数字</param>
/// <returns></returns>
public String CMD_TiaoMaWeiZi(int num)
{
return new StringBuffer().append((char)29).append("H").append((char)num).toString();
} /// <summary>
/// 开始打印(条码类型为CODE39)
/// </summary>
/// <param name="numstr"></param>
/// <returns></returns>
public String CMD_TiaoMaPrint(String numstr)
{
//return ((char)29).append"k" + ((char)4).appendnumstr + ((char)0).toString();
return new StringBuffer().append((char)29).append((char)107).append((char)4).append(numstr).append ((char)0).toString();
} /// <summary>
/// 打开钱箱
/// </summary>
/// <returns></returns>
public String CMC_QianXiang()
{
return new StringBuffer().append((char)27).append((char)112).append((char)0).append((char)60).append((char)255).toString();
}
}

具体怎么调用,每个方法注释写得都很清楚了,至于怎么排版,要看纸的宽度了,然后自己计算字符的长度进行设置,下面是一个异步调用的例子,下面方法仅仅是一个例子,请无视其他无用代码。

页面排版实现,首先得知道打印纸的宽度,还有你要在纸上显示几列,譬如我这个方法 我显示了4列,所有我先根据打印纸的宽度 先设置好每一列的大致宽度,如果该列的字符长度大于设置好的 可以设置换行,如果小于,为了排版整齐 可以补空格,大致实现原理就是这样。

  // 粗略计算打印纸上每个字段占的长度
private int wlname = 18;
private int wlnum = 6;
private int wlunit = 7;
private int wlprice = 9;
 /**
* 网络打印机
*
*
*/
class NetPrint extends AsyncTask<String, String, String> {
private String LocalYHID;
private List<SaveEnity> ListWz = new ArrayList<SaveEnity>();
private String Rr = "";
private String GysName = "";
private String title = "";
private String printtime = "";
private String errInfo = "";
private String TotlePrice = "";
private NetPrinter printer;
private String Md_Name;
private String Date_Time; public NetPrint(String LocalYHID, String GysName,String Date_Time) {
this.LocalYHID = LocalYHID;
this.GysName = GysName;
this.Date_Time = Date_Time;
isclick = true;
} @Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try {
printer = new NetPrinter();
if(!Utils.isEmpty(Const.print_Port)){
printer.Open(Const.print_IP, Integer.parseInt(Const.print_Port));
}
if(printer.IFOpen){
JSONArray ArrayItems = new JSONArray();
ArrayItems = usedatabase.getLocalData(LocalYHID);
TotlePrice = usedatabase.getTotlePrice(LocalYHID);
ListWz = JSON.parseArray(ArrayItems.toString(), SaveEnity.class);
MyLogger.showLogWithLineNum(5, ListWz.size() + "长度");
Collections.sort(ListWz, new SaComParator()); List<String> Select = new ArrayList<String>();
List<String> EndSelect = new ArrayList<String>();
for (int i = 0; i < ListWz.size(); i++) {
SaveEnity save = ListWz.get(i);
Select.add(save.DJX_CK_NAME);
}
for (String s : Select) {
if (Collections.frequency(EndSelect, s) < 1) EndSelect.add(s);
}
for (int i = 0; i < EndSelect.size(); i++) {
Rr += formatSSTest(EndSelect.get(i), ListWz);
}
String Name = "物料名";
String Num = "数量";
String Unit = "单位";
String Price = "单价";
String Spc = "";
for (int j = 0; j < wlname - getWordCount("物料名"); j++) {
Spc = Spc + " ";
}
Log.e("物料名称长度"+wlname+"补空格", wlname-getWordCount("物料名")+"");
Name = Name + Spc;
Spc = "";
for (int i = 0; i < wlnum - getWordCount("数量"); i++) {
Spc = Spc + " ";
}
Num = Spc + Num;
Log.e("数量长度"+wlnum+"补空格", wlnum-getWordCount("数量")+"");
Spc = ""; for (int i = 0; i < wlunit - getWordCount("单位"); i++) {
Spc = Spc + " ";
}
Unit = Spc + Unit;
Spc = "";
Log.e("单位长度"+wlunit+"补空格", wlunit-getWordCount("单位")+"");
for (int i = 0; i < wlprice - getWordCount("单价"); i++) {
Spc = Spc + " ";
}
Price = Spc + Price;
Spc = "";
Log.e("长度"+wlprice+"补空格", wlprice-getWordCount("单价")+"");
String printstr = Name + Price + Num + Unit;
title = "供应商: " + GysName + "\n" + printstr;
printtime = "打印时间:" + Date_Time + "\n\n";
Md_Name = Const.MD_Name; }
} catch (Exception e) {
e.printStackTrace();
}
return null;
} @Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
} @Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(printer.IFOpen){
String[] aaray = Rr.split("#");
printer.PrintText(title, 0, 0, 0);
printer.PrintEnter();
for (String s : aaray) {
printer.PrintText(s, 0, 0, 0);
}
printer.PrintEnter();
printer.PrintText(TotlePrice, 0, 0, 0);
printer.PrintEnter();
printer.PrintEnter();
printer.PrintText(printtime, 0, 0, 0);
printer.PrintEnter();
printer.PrintText(Md_Name, 1,1,0);
printer.PrintNewLines(5);
printer.CutPage(0);
printer.Close();
isclick = false;
MyToast.MyLogo(History.this, "打印完成");
}else{
MyToast.MyLogo(History.this, "未能连接打印机");
}
}
}

Android连接网络打印机进行打印的更多相关文章

  1. Android连接网络打印机,jSocket连接网络打印机

    老大写的一个打印工具类,记录一下. package com.Ieasy.Tool; import android.annotation.SuppressLint; import java.io.IOE ...

  2. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

    如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengw ...

  3. android连接打印机

    android连接  网络打印,主要使用socket连接设备,发送指令给设备. 首先要有设备的IP,端口号一般默认的是9100 //打印设备网络IP etIp.setText("192.16 ...

  4. Android连接socket服务器上传下载多个文件

    android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { ;// 端口号,必须与客户端一致 ...

  5. 阿里云物联网平台: Android 连接阿里云物联网平台

    说明 这节是是为下一节做铺垫的 只要是按照我提供的学习路线一节一节的认认真真学过来的,这节就十分的简单 有了前两节的基础,这节呢咱让Android 连接阿里云物联网平台 使用这节的代码  https: ...

  6. android 连接蓝牙打印机 BluetoothAdapter

    android 连接蓝牙打印机 BluetoothAdapter 源码下载地址:https://github.com/yylxy/BluetoothText.git public class Prin ...

  7. Android 连接 SQL Server (jtds方式)——上

    本文将介绍开发Android程序,连接SQL Server,通过第三方包jtds的方式. 如果你有同样的需求,请跟着做一遍,博主将以最详细的方式,进行介绍. 首先说明,Java.Android连接SQ ...

  8. android的Log日志打印管理工具类(一)

    android的Log日志的打印管理工具类: package com.gzcivil.utils; import android.util.Log; /** * 日志打印管理 * * @author ...

  9. Android连接SQLServer详细教程(数据库+服务器+客户端)

    摘星 标签: android连接sql http://blog.csdn.net/haoxingfeng/article/details/9111105

随机推荐

  1. 用CIL写程序:你好,沃尔德

    前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了.以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾. ...

  2. ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件

    虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...

  3. Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案

    最近在基于ASP.NET上开发了Paypal支付平台,在ASP.NET开发的过程中没有遇到这个问题,但是引用到MVC开发模式中的时候就出现了"未能创建 SSL/TLS 安全通道及解决方案&q ...

  4. vue.js学习笔记

    有了孩子之后,元旦就哪也去不了了(孩子太小),刚好利用一些时间,来公司充充电补补课,学习学习新技术,在这里做一个整理和总结.(选择的东西,既然热爱就把他做好吧!). 下来进入咱们的学习环节: 一.从H ...

  5. 十分钟玩转 jQuery、实例大全

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQuery对象 jQuery产 ...

  6. 解决“chrome提示adobe flash player 已经过期”的小问题

    这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...

  7. 【转】为什么我们都理解错了HTTP中GET与POST的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  8. Oracle补全日志(Supplemental logging)

    Oracle补全日志(Supplemental logging)特性因其作用的不同可分为以下几种:最小(Minimal),支持所有字段(all),支持主键(primary key),支持唯一键(uni ...

  9. 利用HAProxy代理SQL Server的AlwaysOn辅助副本

    利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...

  10. 从is(":checked")说起

    *此文所用jQuery版本应大于1.6.1   如何判断一个单选(复选)框是否选中. 对于刚接触jQuery的人,第一反应必然是. <input id="checkbox1" ...