Jdbc连接数据库Column 'EmployeeId' cannot be null 5C

一直出现以下错误:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'EmployeeId' cannot be null

图片说明

因为题目要求主键自增,类型是varchar,所以我用了触发器进行自增
begin
set new.employeeid=concat('E',lpad(((select substring(employeeid,2,3) from epoint_employee where employeeid=(select employeeid from epoint_employee order by employeeid desc limit 1))+1),3,0));
end

以下是java代码:
Test
Employee
EmployeeImpl

import java.sql.SQLException;

public class Test {
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
EmployeeImpl ei=new EmployeeImpl();
System.out.println(ei.save("E001", "123", "SWEET", 22, 4325));
// System.out.println(ei.save("E002", "321", "TINA", 21, 4000));
// System.out.println(ei.save("E003", "111", "JACK", 21, 4000));
// System.out.println(ei.save("E004", "222", "MARK", 21, 4000));
// System.out.println(ei.save("E005", "123", "NICK", 22, 4325));
// System.out.println(ei.delete("004"));

// System.out.println(ei.update("001", "22222", "ZS", 22, 4325));

// ei.find("001");
}
}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class EmployeeImpl implements Employee {
public static String driver = "com.mysql.jdbc.Driver";
public static String url = "jdbc:mysql://localhost:3306/epoint?characterEncoding=utf8&useSSL=true";
public static String user = "sa";
public static String pwd = "11111";

public String EmployeeId;// 员工账号
public String Password; // 员工密码
public String Name; // 姓名
public int Age; // 年龄
public double Salary; // 工资

public Connection getConnection() {
    Connection con = null;
    try {
        Class.forName(driver);
        con = DriverManager.getConnection(url, user, pwd);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return con;
}

public boolean save(String employeeid, String password, String name, int age, double salary){

    Connection con = new EmployeeImpl().getConnection();
    PreparedStatement pst=null;

// boolean b=true;
try {
pst=con.prepareStatement("insert into Epoint_EMPLOYEE(EmployeeId,Password,Name,Age,Salary) values(?,?,?,?,?)");//?: 占位符
//占位符有几个就写几个,否则会报错
pst.setString(1, employeeid);
pst.setString(2, password);
pst.setString(3, name);
pst.setInt(4, age);
pst.setDouble(5, salary);
// b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R
int i=pst.executeUpdate();//返回受影响的行数
System.out.println(i);
// System.out.println(pst.getUpdateCount());//打印了几行
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}

public boolean update(String employeeid, String password, String name, int age, double salary){
    Connection con = new EmployeeImpl().getConnection();
    PreparedStatement pst=null;
    boolean b=true;
    try {
        pst=con.prepareStatement("update Epoint_EMPLOYEE set password=? where employeeid=?");//?: 占位符
        //占位符有几个就写几个,否则会报错

        pst.setString(1, password);
        pst.setString(2, employeeid);
        b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R

// int i=pst.executeUpdate();//返回受影响的行数
// System.out.println(i);
// System.out.println(pst.getUpdateCount());//打印了几行
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

    return b;
}

public boolean delete(String employeeid) {

    Connection con = new EmployeeImpl().getConnection();
    PreparedStatement pst=null;
    boolean b=true;
    try {
        pst=con.prepareStatement("delete from Epoint_EMPLOYEE where employeeid=?");
        //占位符有几个就写几个,否则会报错
        pst.setString(1, employeeid);
        b=pst.execute();//返回Boolean类型,false表示执行CUD语句,true为R

// int i=pst.executeUpdate();//返回受影响的行数
// System.out.println(i);
// System.out.println(pst.getUpdateCount());//打印了几行
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

    return b;

}

public void find(String employeeid){
    Connection con = new EmployeeImpl().getConnection();
    ResultSet rs = null;
    PreparedStatement pst=null;
    try {
        pst=con.prepareStatement("select * from Epoint_EMPLOYEE where employeeid=?");
        //占位符有几个就写几个,否则会报错
        pst.setString(1, employeeid);
        rs = pst.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getString(1));
            System.out.println(rs.getString(2));
            System.out.println(rs.getString(3));
            System.out.println(rs.getInt(4));
            System.out.println(rs.getDouble(5));
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            if (rs != null && !rs.isClosed()) {
                rs.close();
            }
            if (pst != null && !pst.isClosed()) {
                pst.close();
            }
            if (con != null && !con.isClosed()) {
                con.close();
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

}

import java.sql.SQLException;

public interface Employee {
public boolean save(String employeeid, String password,String name, int age, double salary);

public boolean update(String employeeid, String password,String name, int age, double salary);
public boolean delete(String employeeid);
public void find (String employeeid);
}

10个回答

我把触发器的代码去掉了,运行了一遍可以的,然后再把触发器代码加上去运行,也可以了。。。自增效果也出来了。。。见鬼了。。。

是不是你在update时,给这个字段赋了空值

dandongsoft
dandongsoft 啥问题啊,我也遇到这样的问题
一年多之前 回复
qq_32912529
玖玖922 我已经把表中数据删了,现在就是想加一条进去,然后就出现了这个错误
大约 2 年之前 回复

设置数据库字段属性,设为可以为null就行了!

修改下你数据库字段,或者你的UPDATA做好检查

这个是事务顺序的问题吧,触发没用过,不能做回答

应该是主键冲突导致问题报错,可以每次自增的时候将id属性增加UUIDUtils的方式实现主键自增,这样既实现主键自增,又避免主键冲突!

SoumnsJ
及时当勉励岁月不待人 前提是也要修改触发器,之所以为空值还是update时出现的问题!
大约 2 年之前 回复

应该是数据库表里字段属性的问题

应该是在修改这块的空值

qq_32912529
玖玖922 可以详细点嘛?
大约 2 年之前 回复

update时,空值

qq_32912529
玖玖922 我没有调用update方法啊。。。
大约 2 年之前 回复

执行update时候给了空值

qq_32912529
玖玖922 update已经被我注释了啊,没用过
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
删除考勤重复刷卡记录?
1. ```FOR DELETE,Update AS 1. delete from onoffdutydata where onoffdutyid in ( select a.onoffdutyid From onoffdutd in ( select a.onoffdutyid From onoffdutydata a inner join employeemsg b on a.employeeid=b.employeeid and a.checkdate<b.ondutytime) 1. delete from employeesalary where salaryid in ( select a.salaryid From employeesalary a inner join employeemsg b on a.employeeid=b.employeeid and a.Yearmonth>convert(nvarchar(7),outdutytime,21)) 1. delete from employeesalary where salaryid in ( select a.salaryid From employeesalary a inner join employeemsg b on a.employeeid=b.employeeid and a.Yearmonth<convert(nvarchar(7),ondutytime,21)) 1. delete from originalcheckdata where originaldataid in (select a.originaldataid from originalcheckdata a inner join originalcheckdata b on a.employeeid=b.employeeid and a.occurtime=b.occurtime and a.originaldataid>b.originaldataid) GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO ``` ![图片说明](https://img-ask.csdn.net/upload/201912/20/1576841900_935726.png)
C#将图片以二进制存入数据库
public void SaveImage(string MID, OpenFileDialog openF)//将图片以二进制存入数据库中 { string strimg = openF.FileName.ToString(); //记录图片的所在路径 FileStream fs = new FileStream(strimg, FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存 BinaryReader br = new BinaryReader(fs); byte[] imgBytesIn= br.ReadBytes((int)fs.Length); //将流读入到字节数组中 conn.Open(); StringBuilder strSql = new StringBuilder(); strSql.Append("update tb_employee Set employeePhoto=@Photo where employeeID=" + MID); SqlCommand cmd = new SqlCommand(strSql.ToString(), conn); cmd.Parameters.Add("@Photo", SqlDbType.Binary).Value = imgBytesIn; cmd.ExecuteNonQuery(); conn.Close(); } ![图片说明](https://img-ask.csdn.net/upload/201612/20/1482209568_259134.png) “System.Data.SqlClient.SqlException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 不能将值 NULL 插入列 'employeePhoto',表 'db_PMS.dbo.tb_employee';列不允许有 Null 值。INSERT 失败。 为什么图片总会成NULL
使一个表自引用报错,,,,,,
CREATE TABLE [dbo].[Employees]( [**_EmployeeID_**] [int] IDENTITY(1,1) NOT NULL, 。。。。。(省略了) [**ManagerEmpID**] [int] NOT NULL) 然后又加了一个外键(引用本表的), ALTER TABLE Employees ADD CONSTRAINT FK_EmployeeHasManager Foreign key (**ManagerEMPID**) REFERENCES Employees(**_EmployeeID_**) 但插入数据时会报错,书中说,应该先插入一条数据 ,然后再加外键 ,“可是还是会报错,ALTER TABLE 语句与 FOREIGN KEY SAME TABLE 约束"FK_EmployeeHasManager"冲突。该冲突发生于数据库"Accounting",表"dbo.Employees", column 'EmployeeID'。求给力啊
在我这个例子中where 1=1 {0}什么意思?{0}指的哪个?
``` string table = @"select a.IDNumber,(a.SurName||a.Name) as Name,a.Sex,a.Gzdw,a.Rszgdw,sum(CASE WHEN b.[State]=0 THEN 1 ELSE 0 END) AS wsj ,sum(CASE WHEN b.[State]=1 THEN 1 ELSE 0 END) AS sz ,sum(CASE WHEN b.[State]=2 THEN 1 ELSE 0 END) AS cz ,sum(CASE WHEN b.[State]=3 THEN 1 ELSE 0 END) AS jc ,(select COUNT(distinct ID) from CardApplyRecord where EmployeeID=a.ID and [State]=0) AS sbz from Employee a inner join [Cards] b on a.IDNumber=b.IDNumber where 1=1 {0} group by a.ID,a.IDNumber,a.SurName,a.Name,a.Sex,a.Gzdw,a.Rszgdw order by a.Gzdw"; ``` 请问一下, where 1=1 {0}什么意思?{0}指的哪个? 麻烦大佬指点一下。
错误 1 无法对属性或索引器“AnonymousType#1.EmployeeId”赋值 -- 它是只读的
var temp = db.UseVihicle.Where(x => x.Id == Id).Select(a => new { a.EmployeeId, a.VihicleId, a.StartTime, a.EndTime, a.Description, a.Destination, a.Cause, a.Status }); foreach (var x in temp) { x.EmployeeId = emp_id; x.VihicleId = vih_id; x.StartTime = DateTime.Parse(StartTime); x.EndTime = DateTime.Parse(EndTime); x.Destination = Destination; x.Cause = Cause; x.Description = Description; x.Status = 3; } db.SubmitChanges();
oracle 通过月份表来查询季度的数据
现在的要求就是查询出 指定年的第几季度到指定年的第几季度的数据 下面是我写的一段代码 就是查询 季度到季度之间 只显示一个季度 判断条件不知该怎么写 <select id="findJi" resultType="java.util.HashMap"> select distinct <foreach collection="table" item="employeeId" index="index" open="" close="" separator=""> <choose> <when test="employeeId!=null and employeeId!=''"> Round(avg(${employeeId})over(partition by year),2) as b${index}, </when> <when test="employeeId==null and employeeId==''"> '' as b${index} </when> </choose> </foreach> <if test="cnzTable!=null and cnzTable!=''"> <foreach collection="cnzTable" item="cnz" index="index" open="" close="" separator=""> <choose> <when test="cnz!=null and cnz!=''"> (select Round(avg(${cnz}),2) from T_SQ_DATA_STATISTIC_MONTH c where STATION_ID=${stationName} and <!-- decode(month_order,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) between ${sJi} and ${eJi} --> decode(c.month_order,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4)>=to_number(${sJi}) and decode(c.month_order,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) <![CDATA[<=]]>to_number(${eJi}) ) as a${index}, </when> <when test="cnz==null and cnz==''"> '' as a${index} </when> </choose> </foreach> </if> <if test="cnzTable==null or cnzTable==''"> <foreach collection="table" item="employeeId" index="index" open="" close="" separator=""> <choose> <when test="employeeId!=null and employeeId!=''"> (select Round(avg(${employeeId}),2) from T_MSIS_BE_HIST_MONTH d where STATION_ID=t.STATION_ID <!-- and decode(month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) between ${sJi} and ${eJi} --> and decode(d.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4)>=to_number(${sJi}) and decode(d.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) <![CDATA[<=]]>to_number(${eJi}) )as a${index} , </when> <when test="employeeId==null and employeeId==''"> '' as a${index} </when> </choose> </foreach> </if> (year||'年'||decode(decode(t.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4),'1','春季','2','夏季','3','秋季','4','冬季')) data1 from T_MSIS_BE_HIST_MONTH t where STATION_ID=${stationName} <!-- and decode(t.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) between ${sJi} and ${eJi} --> and decode(t.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4)>=to_number(${sJi}) and decode(t.month,'1',1,'2',1,'3',1,'4',2,'5',2,'6',2,'7',3,'8',3,'9',3,'10',4,'11',4,'12',4) <![CDATA[<=]]>to_number(${eJi}) and t.year>=to_number(${start}) and t.year <![CDATA[<=]]>to_number(${end}) order by data1 </select> 求大神帮帮忙
mybatis嵌套查询,resultMap不匹配,大神帮我看看
这是实体类: private int employeeId; private String employeeNum; private String employeePass; private String personName; private String employeeGender; private Positions employeePosition; private Department employeeDepartment; private Site employeeSite; 这是mappper: <resultMap type="Employee" id="employeeMap"> <id property="employeeId" column="employeeId"/> <result property="employeeNum" column="employeeNum"/> <result property="employeePass" column="employeePass"/> <result property="personName" column="personName"/> <result property="employeeGender" column="employeeGender"/> <association property="employeePosition" javaType="Positions" column="employeePosition" select="org.carabmer.dao.PositionsDao.positionQuery"> <id property="positionId" column="positionId"/> <result property="positionName" column="positionName"/> </association> <association property="employeeSite" javaType="Site" column="employeeSite" select="org.carabmer.dao.SiteDao.siteQuery"> <id property="siteId" column="siteId"/> <result property="siteAddress" column="siteAddress"/> <result property="siteUsed" column="siteUsed"/> </association> <association property="employeeDepartment" javaType="Department" column="employeeDepartment" select="org.carabmer.dao.DepartmentDao.departmentQuery"> <id property="departmentId" column="departmentId"/> <result property="departmentName" column="departmentName"/> </association> </resultMap> 这是异常: No constructor found in org.carabmer.model.Employee matching [java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Integer] 按理来说返回的属性应该是department等类型,可是还是返回int类型,resultMap还不是很熟悉,大神帮我看看,急
求问大佬用第 4,5题哪里出错了?
![图片说明](https://img-ask.csdn.net/upload/201906/13/1560396601_942057.png) 以上是部门员工数据 4.部门员工数超过5人的部门,工资排名前3 的女性员工 列:(部门名称、员工工号) 5.非 Marketing 部门,男性未婚数量超过其部门总人数 30% 的部门号 列:(部门名称) 4. select DepartmentName,EmployeeId from Data t where Gender='F' select top 3 Salary from Data t group by DepartmentName,EmployeeId,Salary having COUNT(Name)>5 5. select DepartmentName from Data t where DepartmentName!= 'Marketing' and MaritalStatus='S' and Gender='M' group by DepartmentName having (COUNT(Name)/COUNT*)>30%
Java ldap修改AD属性报错
用Java ldap做一个域用户某一个属性信息修改功能 LdapContext ctx = xxx; 已经用域管理用户连接上了,没问题。 ModificationItem modificationItem[] =new ModificationItem[1]; modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("employeeID","123456")); //employeeID 是AD里面的一个属性 ctx.modifyAttributes("uid=robert,cn=users,DC=SMNPC,DC=COM",modificationItem);//就是执行 **ctx.modifyAttributes 这句报错** , 下面是报错的异常信息 Exception in thread "main" javax.naming.NamingException: [LDAP: error code 1 - 000004DC: LdapErr: DSID-0C090B22, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db1 找了半天也不知道这个异常是什么原因造成的,求大家告知一下,顺便有Java ldap修改AD属性值的例子也可以分享一下给我呗
这是职工管理系统的源代码,问题主要是无法以正确格式输出文件内容和修改函数不起作用,希望得到指导。
#include<stdio.h> //标准输入输出函数库 #include<string.h> //strcmp函数使用的头文件 #include<stdlib.h> //标准库头文件system(cls)函数需用到 #include<windows.h> //Sleep函数使用的头文件 #include<conio.h> //getch函数使用的头文件 //宏定义 #define LEN_EMPLOYEE sizeof(struct employee)//employee结构体的长度 #define LEN_ADM sizeof(struct adm)//adm结构体的长度 #define EMPLOYEE_NUM 500//职工的数组大小 #define ADM_NUM 10//管理员的数组大小 #define EMPLOYEE_DATA employeer[i].num,employeer[i].name,employeer[i].sex,employeer[i].age,employeer[i].xueli,employeer[i].wage,employeer[i].addr,employeer[i].tel #define ADM_DATA admer[i].account,admer[i].password //结构体的定义 struct employee { int num; //职工号 char name[20]; //姓名 char sex[10]; //性别 int age; //年龄 char xueli[30]; //学历 int wage; //工资 char addr[30]; //家庭住址 char tel[20]; //联系电话 }; struct adm { int num; //管理员的编号 char account[20]; //管理员的账户 char password[20]; //管理员的密码 }; //全局变量 struct employee employeer[EMPLOYEE_NUM]; struct adm admer[ADM_NUM]; //函数声明部分 void showmainmenu();//显示主菜单 void manager_in();//主管登录 void adm_in();//管理员登录 void employee_in();//职工登录 void managermenu();//主管菜单 void employee_display();//浏览职工信息 int employee_search();//查找职工信息 void employee_del();//删除职工信息 void employee_add();//添加职工信息 void employee_xiugai();//修改职工信息 void adm_add();//添加管理员信息 void adm_display();//浏览管理员信息 void adm_del();//删去管理员信息 void adm_xiugai();//修改管理员信息 int employeefile(char * pcMode);//职工文件函数 void saveemployeefile(int employeeid);//保存职工信息文件函数 void showemployee_xiugaimenu();//显示职工修改菜单 int admfile(char * pcMode);//管理员文件 int adm_search();//管理员查找 void showadm_xiugaimenu();//显示管理员修改菜单 void saveadmfile(int admid);//管理员保存文件函数 void admmenu();//管理员菜单 //主函数 int main() { int n; showmainmenu();/*调用showmainmenu函数绘制界面*/ scanf("%d",&n);/*提示用户输入数字*/ getchar(); while(n)/*当n为0时直接退出程序*/ { switch(n) { case 1: manager_in(); break; case 2: adm_in(); break; case 3: employee_in(); break; default: printf("\t\t请输入正确的数字!\n\t\t程序将于3秒后跳转到主菜单"); Sleep(3000); } showmainmenu(); scanf("%d",&n); getchar(); } return 0; } void showmainmenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 主菜单 |\n"); printf("\t| 身份选择 |\n"); printf("\t| 1.manager |\n"); printf("\t| 2.administrator |\n"); printf("\t| 3.employee |\n"); printf("\t| 0.退出系统 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-3):"); } void manager_in() { int n,i,j=0; char managername[10]; char managerpassword[20]; printf("将于3秒后转至manager登录界面"); Sleep(3000); system("cls"); for(i=0;i<3;i++) { printf("\n\t\t\t请输入你的用户名:"); scanf("%s",managername); printf("\n\t\t\t请输入你的密码:"); scanf("%s",managerpassword); if(strcmp(managername,"limengqi")==0&&strcmp(managerpassword,"123456")==0) { printf("\n\t\t\t登录成功!"); Sleep(1000); j=1; managermenu(); break; } else printf("\t\t\t输入用户名或者密码错误!"); continue; } scanf("%d",&n); getchar(); while(n) { switch(n) { case 1: employee_display(); break; case 2: employee_search(); break; case 3: employee_del(); break; case 4: employee_add(); break; case 5: employee_xiugai(); break; case 6: adm_add(); break; case 7: adm_display(); break; case 8: adm_del(); break; case 9: adm_xiugai(); break; default: printf("\t\t请输入正确的数字!"); } printf("|按任意键返回子菜单|"); getch(); managermenu(); scanf("%d",&n); getchar(); } } void managermenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 子菜单 |\n"); printf("\t| 1.浏览职工信息 |\n"); printf("\t| 2.查询职工信息 |\n"); printf("\t| 3.删除职工信息 |\n"); printf("\t| 4.添加职工信息 |\n"); printf("\t| 5.修改职工信息 |\n"); printf("\t| 6.添加管理员信息 |\n"); printf("\t| 7.浏览管理员信息 |\n"); printf("\t| 8.删除管理员信息 |\n"); printf("\t| 9.修改管理员信息 |\n"); printf("\t| 0.返回主菜单 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-9):"); } void employee_display() { int i,employee_record; system("cls"); employee_record=employeefile("rb"); if(employee_record==-1) printf("文件打开失败,请先添加职工信息!\n"); else if(employee_record==0) printf("文件中没有职工信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); for(i=0;i<employee_record;i++) printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n",EMPLOYEE_DATA); printf("\t|----------------------------------------------------------|\n"); } } void employee_add() { FILE *pfemployee;//文件指针 int employee_record,iflagexist,i; char cFlag; system("cls"); employee_record=employeefile("ab+");//ab+追加方式打开或重建二进制文件 if(employee_record==-1) { printf("文件打开失败!\n"); return; } else if(employee_record==0) printf("文件中没有职工信息!\n"); else employee_display();//如果职工信息不为0则显示所有职工信息 /*以下代码为循环录入职工信息*/ printf("请选择是否要输入职工信息(y/n):"); cFlag=getchar(); getchar(); if(cFlag=='n') return; pfemployee=fopen("employee.txt","ab+"); if( pfemployee==NULL) { printf("文件打开失败!\n"); return; } while(cFlag=='y') { if(employee_record>=EMPLOYEE_NUM)//超过容量范围不能继续写入 { printf("记录已满!"); fclose(pfemployee); return; } printf("请输入职工编号:"); do{ iflagexist=0; scanf("%d",&employeer[employee_record].num); getchar(); for(i=0;i<employee_record;i++) { if(employeer[i].num==employeer[employee_record].num) { iflagexist=1; printf("该职工编号已存在,请重新输入:"); break; } } }while( iflagexist==1); //新增的职工基本信息 printf("请输入职工号:"); scanf("%-6d",&employeer[employee_record].num); getchar(); printf("请输入姓名:"); gets(employeer[employee_record].name); printf("请输入性别:"); scanf("%-10s",&employeer[employee_record].sex); getchar(); printf("请输入年龄:"); scanf("%-6d",&employeer[employee_record].age); getchar(); printf("请输入学历:"); gets(employeer[employee_record].xueli); printf("请输入工资:"); scanf("%-16d",&employeer[employee_record].wage); getchar(); printf("请输入住址:"); gets(employeer[employee_record].addr); printf("请输入电话:"); gets(employeer[employee_record].tel); /*将新增的职工信息写入文件中*/ if(fwrite(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee)!=1) { printf("无法保存该信息!\n"); return; } else { printf("%d号职工信息已保存!\n",employeer[employee_record].num); employee_record++; } printf("继续输入信息吗(y/n)"); cFlag=getchar(); getchar(); } fclose(pfemployee); printf("添加职工信息执行完毕\n"); } int employee_search() { int employeenum,employee_record,employeeid,i; system("cls"); employee_record=employeefile("rb");//以"rb"形式打开文件,如果失败则返回 if(employee_record==-1) { printf("文件打开失败!\n"); printf("|按任意键返回子菜单|"); getch(); return -2;//文件打开失败,返回-2 } else if(employee_record==0) { printf("文件中没有职工信息!\n"); printf("|按任意键返回子菜单|"); getch(); return -3;//文件打开失败,返回-3 } //以下进入查找程序 printf("请输入职工号:"); scanf("%d",&employeenum); getchar(); for(i=0;i<employee_record;i++) { if(employeenum==employeer[i].num ) { employeeid=i;//找到职工记录,返回记录号 printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); printf("\t %-6d %-10s %-10c %-6d %-10s %-16d %-16s %-20s\n",EMPLOYEE_DATA); printf("\t|----------------------------------------------------------|\n"); break; } } if(i==employee_record)//遍历循环,没有找到记录,提示用户 { printf("找不到%d号职工信息!\n",employeenum); employeeid=-1; } return employeeid; } void employee_del() { FILE *pfemployee; int employeeid,employee_record,i; char cFlag;//字符型变量用于选择 system("cls"); employeeid=employee_search();//调用查找函数获得职工记录号 if(employeeid==-1) return; employee_record=employeefile("rb"); printf("已找到该职工,是否删除?(y/n)"); cFlag=getchar(); getchar(); if(cFlag=='n') return; else if(cFlag=='y') { for(i=employeeid;i<employee_record-1;i++) employeer[i]=employeer[i+1];//数组依次前移 employee_record--; } pfemployee=fopen("employee.txt","wb"); if(pfemployee!=NULL) { for(i=0;i<employee_record;i++) { if(fwrite(&employeer[i],LEN_EMPLOYEE,1,pfemployee)!=1) { printf("无法保存该信息!\n"); return; } } fclose(pfemployee); printf("该职工信息已删除!\n"); } } void employee_xiugai() { int employeeid,employee_record,iflagexist,n,num,i; system("cls"); employeeid=employee_search();//调用查找函数获得职工记录号 if(employeeid==-1)//未找到该序号的职工,直接返回 return; //找到该序号的职工,可以进行修改操作 employee_record=employeefile("rb"); showemployee_xiugaimenu();//显示修改选项的菜单 scanf("%d",&n); getchar(); switch(n) { case 1: printf("请输入职工编号:"); do { iflagexist=0; scanf("%d",&n); getchar(); for(i=0;i<employee_record;i++) { if(num==employeer[i].num&&i!=employeeid) { iflagexist=1; printf("错误,该职工编号已存在,请重新输入:"); break; } } }while(iflagexist==1); employeer[employeeid].num=num; break; case 2: printf("请输入职工姓名:"); gets(employeer[employee_record].name); break; case 3: printf("请输入性别:"); scanf("%-10s",employeer[employee_record].sex); getchar(); break; case 4: printf("请输入年龄:"); scanf("%-10d",&employeer[employee_record].age); getchar(); break; case 5: printf("请输入学历:"); gets(employeer[employee_record].xueli); break; case 6: printf("请输入工资:"); scanf("%-16d",&employeer[employee_record].wage); getchar(); break; case 7: printf("请输入住址:"); gets(employeer[employee_record].addr); break; case 8: printf("请输入电话:"); gets(employeer[employee_record].tel); break; } //调用saveemployeefile函数将修改记录存入文件 saveemployeefile(employeeid); printf("职工信息修改成功!\n"); } void showemployee_xiugaimenu() { printf("\n"); printf("\t| 1.职工号 |\n"); printf("\t| 2.姓名 |\n"); printf("\t| 3.性别 |\n"); printf("\t| 4.年龄 |\n"); printf("\t| 5.学历 |\n"); printf("\t| 6.工资 |\n"); printf("\t| 7.住址 |\n"); printf("\t| 8.电话 |\n"); printf("\n"); printf("请输入所要修改的信息(输入相应的数字:1-5):"); } int employeefile(char * pcMode)//该函数负责从文件中读取所有的职工信息,并记录employee_record的值 { int employee_record=0; FILE *pfemployee; pfemployee=fopen("employee.txt",pcMode); if(pfemployee==NULL) return -1; while(!feof(pfemployee)) { if(fread(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee)) employee_record++; } fclose(pfemployee); return employee_record; } void saveemployeefile(int employeeid)//该函数专门负责将职工记录号为employeeid的职工信息写入到文件中 { FILE *pfemployee; pfemployee=fopen("employee.txt","a+"); if(pfemployee!=NULL) { fseek(pfemployee,LEN_EMPLOYEE * employeeid,SEEK_SET); if(fwrite(&employeer[employeeid],LEN_EMPLOYEE,1,pfemployee)!=1) printf("无法保存该信息!\n"); } fclose(pfemployee); } void adm_add() { FILE *pfadm;//文件指针 int adm_record,iflagexist,i; char cFlag; system("cls"); adm_record=admfile("ab+");//ab+追加方式打开或重建二进制文件 if(adm_record==-1) { printf("文件打开失败!\n"); return; } else if(adm_record==0) printf("文件中没有职工信息!\n"); else adm_display();//如果职工信息不为0则显示所有职工信息 /*以下代码为循环录入职工信息*/ printf("请选择是否要输入职工信息(y/n):"); cFlag=getchar(); getchar(); if(cFlag=='n') return; pfadm=fopen("adm.txt","ab+"); if( pfadm==NULL) { printf("文件打开失败!\n"); return; } while(cFlag=='y') { if(adm_record>=ADM_NUM)//超过容量范围不能继续写入 { printf("记录已满!"); fclose(pfadm); return; } printf("请输入管理员编号:"); do{ iflagexist=0; scanf("%d",&admer[adm_record].num); getchar(); for(i=0;i<adm_record;i++) { if(admer[i].num==admer[adm_record].num) { iflagexist=1; printf("该管理员编号已存在,请重新输入:"); break; } } }while( iflagexist==1); //新增的管理员的账户和密码 printf("请输入管理员号:"); scanf("%-6d",&admer[adm_record].num); getchar(); printf("请输入账户:"); gets(admer[adm_record].account); printf("请输入密码:"); gets(admer[adm_record].password); /*将新增的管理员的账户和密码写入文件中*/ if(fwrite(&admer[adm_record],LEN_ADM,1,pfadm)!=1) { printf("无法保存该信息!\n"); return; } else { printf("%d号职工信息已保存!\n",admer[adm_record].num); adm_record++; } printf("继续输入信息吗(y/n)"); cFlag=getchar(); getchar(); } fclose(pfadm); printf("添加管理员账户和密码执行完毕\n"); } void adm_display() { int i,adm_record; system("cls"); adm_record=admfile("rb"); if(adm_record==-1) printf("文件打开失败,请先添加管理员信息!\n"); else if(adm_record==0) printf("文件中没有管理员信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-20s %-20s\n","管理员编号","账户","密码"); for(i=0;i<adm_record;i++) printf("\t %-6d %-20s %-20s\n",ADM_DATA); printf("\t|----------------------------------------------------------|\n"); } } void adm_del() { FILE *pfadm; int admid,adm_record,i; char cFlag;//字符型变量用于选择 system("cls"); admid=adm_search();//调用查找函数获得管理员记录号 if(admid==-1) return; adm_record=admfile("rb"); printf("已找到该管理员,是否删除?(y/n)"); cFlag=getchar(); getchar(); if(cFlag=='n') return; else if(cFlag=='y') { for(i=admid;i<adm_record-1;i++) admer[i]=admer[i+1];//数组依次前移 adm_record--; } pfadm=fopen("adm.txt","wb"); if(pfadm!=NULL) { for(i=0;i<adm_record;i++) { if(fwrite(&admer[i],LEN_ADM,1,pfadm)!=1) { printf("无法保存该信息!\n"); return; } } fclose(pfadm); printf("%d号管理员信息已删除!\n",admer[i].num); } } void adm_xiugai() { int admid,adm_record,iflagexist,n,num,i; system("cls"); admid=adm_search();//调用查找函数获得管理员记录号 if(admid==-1)//未找到该序号的管理员,直接返回 return; //找到该序号的管理员,可以进行修改操作 adm_record=admfile("rb"); showadm_xiugaimenu();//显示修改选项的菜单 scanf("%d",&n); getchar(); switch(n) { case 1: printf("请输入管理员编号:"); do { iflagexist=0; scanf("%d",&n); getchar(); for(i=0;i<adm_record;i++) { if(num==admer[i].num&&i!=admid) { iflagexist=1; printf("错误,该管理员编号已存在,请重新输入:"); break; } } }while(iflagexist==1); admer[admid].num=num; break; case 2: printf("请输入管理员账户:"); gets(admer[adm_record].account); break; case 3: printf("请输入管理员密码:"); gets(admer[adm_record].password); break; } //调用saveadmfile函数将修改记录存入文件 saveadmfile(admid); printf("管理员信息修改成功!\n"); } void showadm_xiugaimenu() { printf("\n"); printf("\t| 1.管理员编号 |\n"); printf("\t| 2.账户 |\n"); printf("\t| 3.密码 |\n"); printf("\n"); printf("请输入所要修改的信息(输入相应的数字:1-3):"); } int admfile(char * pcMode)//该函数负责从文件中读取所有的管理员信息,并记录adm_record的值 { int adm_record=0; FILE * pfadm; pfadm=fopen("adm.txt",pcMode); if(pfadm==NULL) return -1; while(!feof(pfadm)) { if(fread(&admer[adm_record],LEN_ADM,1,pfadm)) adm_record++; } fclose(pfadm); return adm_record; } void saveadmfile(int admid)//该函数专门负责将管理员记录号为admid的管理员信息写入到文件中 { FILE *pfadm; pfadm=fopen("adm.txt","r+"); if(pfadm!=NULL) { fseek(pfadm,LEN_ADM * admid,SEEK_SET); if(fwrite(&admer[admid],LEN_ADM,1,pfadm)!=1) printf("无法保存该信息!\n"); } fclose(pfadm); } int adm_search() { int admnum,adm_record,admid,i; system("cls"); adm_record=admfile("rb");//以"rb"形式打开文件,如果失败则返回 if(adm_record==-1) { printf("文件打开失败!\n"); printf("|按任意键返回子菜单|"); getch(); return -2;//文件打开失败,返回-2 } else if(adm_record==0) { printf("文件中没有职工信息!\n"); printf("|按任意键返回子菜单|"); getch(); return -3;//文件打开失败,返回-3 } //以下进入查找程序 printf("请输入职工号:"); scanf("%d",&admnum); getchar(); for(i=0;i<adm_record;i++) { if(admnum==admer[i].num ) { admid=i;//找到职工记录,返回记录号 printf("\t %-6d %-20s %-20s\n","管理员编号","账户","密码"); printf("\t %-6d %-20s %-20s\n",ADM_DATA); printf("\t|----------------------------------------------------------|\n"); break; } } if(i==adm_record)//遍历循环,没有找到记录,提示用户 { printf("找不到%d号职工信息!\n",admnum); admid=-1; } return admid; } void adm_in() { int i,n,k,j=-1,adm_record; char admaccount[20]; char admpassword[20]; FILE *fpadm; adm_record=admfile("rb"); printf("将于3秒后转至administrator登录界面"); Sleep(3000); system("cls"); for(k=0;k<3;k++) { printf("\n\t\t\t请输入你的账户名:"); scanf("%s",admaccount); printf("\n\t\t\t请输入你的登入密码:"); scanf("%s",admpassword); for(i=0;i<adm_record;i++) { if(strcmp(admer[i].account,admaccount)==0&&strcmp(admer[i].password,admpassword)==0) { printf("\n\t\t\t登入成功!"); j=1; admmenu(); goto loop; } else printf("\t\t\t用户名或者密码错误,请重新输入:"); break; } } if(j==-1) { printf("\t连续输入错误3次,即将退出程序\n"); Sleep(1000); exit(0); } loop: scanf("%d",&n); getchar(); while(n) { switch(n) { case 1: employee_display(); break; case 2: employee_search(); break; case 3: employee_del(); break; case 4: employee_add(); break; case 5: employee_xiugai(); break; default: printf("\t\t请输入正确的数字!"); } printf("|按任意键返回子菜单|"); getch(); admmenu(); scanf("%d",&n); getchar(); } } void admmenu() { system("cls"); printf("\n\n\n\n\n"); printf("\t|------------------欢迎进入-----------------------|\n"); printf("\t| 职工管理系统 |\n"); printf("\t| 子菜单 |\n"); printf("\t| 1.浏览职工信息 |\n"); printf("\t| 2.查询职工信息 |\n"); printf("\t| 3.删除职工信息 |\n"); printf("\t| 4.添加职工信息 |\n"); printf("\t| 5.修改职工信息 |\n"); printf("\t| 0.返回主菜单 |\n"); printf("\t|-------------------------------------------------|\n"); printf("\n"); printf("\t\t请选择(0-5):"); } void employee_in() { int n,employee_record; system("cls"); printf("\n\n\n\n\n"); employee_record=employeefile("rb"); if(employee_record==-1) printf("文件打开失败,你的信息还没有被添加!\n"); else if(employee_record==0) printf("文件中没有你的信息!\n"); else { printf("\t|----------------------------------------------------------|\n"); printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话"); printf("请输入你的职工号:\n"); scanf("%d",&n); printf("\t %-6d %-10s %-10c %-6d %-10s %-16d %-16s %-20s\n",employeer[n-1].num,employeer[n-1].name,employeer[n-1].sex,employeer[n-1].age,employeer[n-1].xueli,employeer[n-1].wage,employeer[n-1].addr,employeer[n-1].tel); printf("\t|----------------------------------------------------------|\n"); } }
制作一个考勤表格如何实现鼠标拖动选择多个单元格然后右键菜单实现批量考勤
![图片说明](https://img-ask.csdn.net/upload/201906/19/1560937583_947710.png) 用bootstraptable做了一个考勤的表格。 请问怎么鼠标拖动怎么选取多个单元格弹出菜单然后批量设置呢? html代码 ``` <button class="btn btn-primary" type="button" id="searchBtn_Table" onclick="ifnull()">查询</button> <div class="col-sm-12" id="singlelast"> </div> ``` js ``` function ifnull() { if ($("#TeamGroupName").val() == "0") { zcy.alert.error("请选择需要查询的班组"); return false; } if ($("#date").val() == "") { zcy.alert.error("请选择需要查询的时间"); return false; } //get数据 getAttendanceResult(); //加载表头日期 var date = $("#date").val(); var year = parseInt(date.split("-")[0]); var month = parseInt(date.split("-")[1]); var daycount = getLastDay(year, month); //得到选中月份的最大天数 MaxDays = daycount; selectYear = year; $("#singlelast").empty(); $("#singlelast").append("<table id='tablesinglelast' data-toggle='table' align='center' ></table>") var appendPos = $("#tablesinglelast"); //$("#tablesinglelast").bootstrapTable('destroy'); appendPos.append("<thead><tr>"+ "<th data-field='EmployeeId' rowspan='2' id='employeeName' data-valign='middle' data-align='center'> 工号</th > " + "<th id='lineTd' data-field='EmployeeName' data-valign='middle' rowspan='2' data-align='center'>" + "<span style='float:left;margin-top:20px;'>姓名</span>" + "<span style='float:left;margin-top:-10px;'>日期</span>"+ "</th > " + "<th data-formatter='OvertimeLength' data-valign='middle' colspan='2' data-align='center'>加班</th>" + "<th data-formatter='Askleavelength' data-valign='middle' colspan='2' data-align='center'>请假</th>" + "<th data-valign='middle' data-align='center'>工伤</th>" + "</tr><tr></tr></thead>"); //加载table_foot var table_foot = $("#table_foot"); table_foot.css("display","block"); for (var i = 1; i <= daycount; i++) { var appendPos2 = $("#tablesinglelast").children().eq(0).children().eq(0).children().eq(i+1 - 1); appendPos2.after("<th data-valign='middle' colspan='1' data-align='center'>" + i + "</th>"); } for (var i = 1; i <= daycount; i++) { var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1); var month2 = (month > 9) ? ("" + month) : ("0" + month); var day = (i > 9) ? ("" + i) : ("0" + i); var heredate = year + "-" + month2 + "-" + day; var weekday = new Date(heredate).getDay(); text = ""; switch (weekday) { case 0: text = "日"; break; case 1: text = "一"; break; case 2: text = "二"; break; case 3: text = "三"; break; case 4: text = "四"; break; case 5: text = "五"; break; case 6: text = "六"; break; } appendPos3.append("<th data-formatter='DateAttendance' data-align='center' data-field='" + year + "-" + month2 + "-" + day + "'>" + text + "</th>"); selectMonth = month2; } var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1); appendPos3.append("<th data-formatter='OverDay' data-align='center'>天</th>"+ "<th data-formatter='OverHour' data-align='center'>时</th>"+ "<th data-formatter='AskleaveDay' data-align='center'>天</th>"+ "<th data-formatter='AskleaveHour' data-align='center'>时</th>"+ "<th data-align='center'>天</th>" ); $('.context').contextmenu({ target: '#context-menu', before: function (e, context) { // execute code before context menu if shown }, onItem: function (context, e) { // execute on menu item selection } }); readyTable(); $("#singlelast tr td").addClass(); } function getLastDay(year, month) { var new_year = year; //取当前的年份 var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定) if (month > 12) //如果当前大于12月,则年份转到下一年 { new_month -= 12; //月份减 new_year++; //年份增 } var new_date = new Date(new_year, new_month, 1); //取当年当月中的第一天 return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate();//获取当月最后一天日期 } function readyTable() { $("#tablesinglelast").bootstrapTable({ //bootstraptable 插件 pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 20, 30], pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: 'asc', striped: true, //行间隔色 showExport: true, //是否显示导出 exportDataType: 'all', search: true, detailView: false,//父子表 onExpandRow: function (index, row, $detail) { oInitInitSubTable(index, row, $detail); } }); } function getAttendanceResult() { var TeamGroupId = $("#TeamGroupName").val(); var date = $("#date").val(); $.ajax({ url: "/Employee/getAttendanceResult", type: "post", dataType: 'json', data: { "TeamGroupId": TeamGroupId, "date": date, }, success: function (data) { chkData = eval(data); $('#tablesinglelast').bootstrapTable('load', chkData); }, error: function () { zcy.alert.error("获取考勤表失败"); } }); } ``` 我用bootstrap-table-contextmenu 在getAttendanceResult实现了一个右键菜单 ``` function getAttendanceResult() { //鼠标右键菜单 $('#tablesinglelast').bootstrapTable({ contextMenu: '#context-menu', onContextMenuItem: function(row, $el){ if ($el.data("item") == "properfunctioning") { //var msg = "你确定要设置为考勤?"; //zcy.alert.confirm("请确认操作",msg); console.log(row); zcy.alert.success(""+row+"的考勤记录"); } } }); var TeamGroupId = $("#TeamGroupName").val(); var date = $("#date").val(); $.ajax({ url: "/Employee/getAttendanceResult", type: "post", dataType: 'json', data: { "TeamGroupId": TeamGroupId, "date": date, }, success: function (data) { chkData = eval(data); $('#tablesinglelast').bootstrapTable('load', chkData); }, error: function () { zcy.alert.error("获取考勤表失败"); } }); } ``` ![图片说明](https://img-ask.csdn.net/upload/201906/20/1561022981_497748.png) 但是获取的都是一行的值,获取不到单元格的值,该怎么办呢?
mybatis 多表查询 resultMap结果集怎么传到Controller
<!-- 部门与员工,一对多,resultMap结果集映射 --> <resultMap type="com.tsy.springmvc.model.system.Employee" id="ClassResultMap"> <id property="employeetID" column="employeetID"/> <result property="employeetName" column="employeetName"/> <result property="depatmentID" column="depatmentID"/> <association property="department" javaType="com.tsy.springmvc.model.system.Department"> <id property="departmentID" column="departmentID"/> <result property="departmentName" column="departmentName"/> </association> </resultMap> <!-- 简单的两个表查询 --> <select id="selectDepartmetAndEmployee" resultMap="ClassResultMap"> select * from employee, department where employee.departmentID = department.departmentID </select> -------------------------------------------------------------------------------------------------------------------------------- Controller @RequestMapping("/") public ModelAndView index(ModelAndView modelAndView) { modelAndView.setViewName("index"); modelAndView.addObject("employeeAndDepartment", employeeService.selectDepartmetAndEmployee()); return modelAndView; } Service public interface IEmployeeService extends IService<Employee> { List<Employee> selectALLEmployee(Employee); //这里我就不知道如何去写 } ①我不知道如何才能获取到多表查询的结果,resultMap映射了,但是不知道怎么使用。 ②是一个简单的部门和员工, 我想在页面显示所有员工(员工的部门)。 ③我是不是应该建立两个mybatis 查询,都是单表查询,然后通过先查询员工,得到员工的所有属性(包括部门ID) 然后在Controller中通过循环查询部门ID,得到一个与员工对应的部门表,然后再通过Model 1 Model 2 传输对应的两个List到页面? -------------------------------------------------------------------------- 针对@独家de记忆,补充 @TableId(value = "employeeID", type=IdType.AUTO) private Long employeeID; //员工ID private String employeeName;//员工姓名 private Long departmentID; //部门ID -------------------------------------------------------------------更改之后 @TableId(value = "employeeID", type=IdType.AUTO) private Long employeeID; //员工ID private String employeeName;//员工姓名 private Long departmentID; //部门ID @TableField(exist = flase) private Long departmentID; //部门名称 --------------------------------------------------------------------- 这样我就可以实现我的问题 但是这样会不会其实很累赘?
请教一业务问题
一个表中 有很多外键 在获取实体时 用连接可以关联其他信息,但是也可通过不同的dao获取 不知道那种好些???? 比如: class Employee{ int employeeId; Dept dept; Job job; getter{} setter{} } 员工表(employeeid,depId,jobId) 部门表(depId) 职位表(jobId) 要查询员工信息 可以如下:select e.employeeid,d.depId,j.jobId from employee e,department d,job j where d.depId=e.depId and j.jobId=e.jobId 也可以通过不同的dao实现: employeeDAO depDAO 通过 depId 获取 department jobDAO 通过 jobId获取 JOB 然后set 通过连接,可以访问数据库的时间和次数 但通过DAO的话,会增加访问数据库的次数,多建立连接 不知道那中方法好,求教
VS2010 C# 调用存储过程
C#具体代码调用以下存储过程 USE [HWATT] GO /****** Object: StoredProcedure [dbo].[PRO_ADDCARD] Script Date: 02/16/2016 13:38:31 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[PRO_ADDCARD] @iismanual smallint, @ircdtime datetime, @idevid bigint, @iemployeecode varchar(16), @iemployeename varchar(250), @iimagedata image, @ircdtype smallint, @ifrom_check smallint, @ifaceidno varchar(5), @iadminid bigint, @iimagestatus smallint, @isnewrcd bigint output AS begin /* Procedure Text */ declare @iemployeeid bigint declare @iimgid bigint declare @icount bigint declare @idevclass smallint declare @istrcardid varchar(50) declare @isqltext varchar(5000) declare @iopid bigint set @idevclass = 0 set @isnewrcd = 0 set @ircdtype = 0 set @iemployeeid = (SELECT MAX(EMPLOYEEID) FROM KQZ_EMPLOYEE where employeecode = @iemployeecode and brchid = (select max(brchid) from kqz_employee where employeecode = @iemployeecode AND BRCHID != -3)) IF(@iemployeeid is null) BEGIN INSERT INTO kqz_employee(BrchID,BrchName,EmployeeCode,EmployeeName,gender,ModelNum,Privilege,DevTypeSTR,IsCheck,OnRule,OffRule,CanOvertime,HaveFesta,HavePwd) VALUES (1,'1',@iemployeecode,@iemployeename,2,0,0,'',1,0,0,1,1,0) set @iemployeeid = (select @@identity) END set @icount = (SELECT count(*) FROM KQZ_CARD T1 INNER JOIN KQZ_EMPLOYEE T2 ON T1.EMPLOYEEID = T2.EMPLOYEEID AND T2.EMPLOYEEID = @iemployeeid AND T2.EMPLOYEECODE = @iemployeecode AND CARDTIME = @ircdtime) if(@icount > 0) begin set @isnewrcd = -1 return @isnewrcd end if (@iimagedata IS NOT NULL) BEGIN insert into kqz_Img (ImgPhoto) values (@iimagedata) set @iimgid = (select @@identity) END ELSE BEGIN set @iimgid = 0 END INSERT INTO kqz_Card(EmployeeID,CardTime,CardTypeID,DevID,DevClass,ImgID,ImgStatus,IsValidate,ModifyUser,ModifyType,FaceIDNo) values (@iemployeeid,@ircdtime,@ircdtype,@idevid,@ifrom_check,@iimgid,@iimagestatus,0,0,0,@ifaceidno) set @isnewrcd = (select @@identity) IF(@iismanual = 1) BEGIN set @istrcardid = cast(@isnewrcd as varchar(30)) INSERT INTO KQZ_CARD_OP(OPTYPE,INSERTCONDITION,OPEMPLOYEE) VALUES(1,@istrcardid,@iadminid) set @iopid = (select @@identity) set @ISQLTEXT = N' INSERT INTO KQZ_CARD_OP_DETAILS(OPID,CARDID,EMPLOYEEID,CARDTIME,CARDTYPEID,DEVID,DEVCLASS,CVERIFY,IMGID,IMGSTATUS,ISVALIDATE, FACEIDNO,MODIFYUSER,MODIFYTYPE,MODIFYTIME) SELECT ' + cast(@iopid as varchar(30)) +',CARDID,EMPLOYEEID,CARDTIME,CARDTYPEID,DEVID,DEVCLASS,CVERIFY,IMGID,IMGSTATUS,ISVALIDATE, FACEIDNO,MODIFYUSER,MODIFYTYPE,MODIFYTIME FROM KQZ_CARD WHERE cardid = ' + cast(@istrcardid as varchar(30)) exec (@ISQLTEXT) end return @isnewrcd end
请问下列这个json数据怎么取到customer 里的数据
我用res.data.object.customer取出来的是undefined { "code": 1, "message": "成功!", "object": [ { "tid": 41, "status": 1, "version": 0, "createUser": 5, "createTime": "2018-03-20 18:06:58", "modifyUser": 5, "modifyTime": null, "modifyDescription": "初始创建", "companyName": "", "contactname": "", "contactphone": "", "companyAddress": "", "time": "2018-03-20 19:00", "longitude": 121.174228, "latitude": 31.146823, "employeeId": 584, "vendorId": 5, "customerId": 23, "remark": "11", "signin": 0, "signout": 0, "signPhoto": "", "signoutPhot": "", "resultmark": "", "signRemark": "", "signlat": null, "signlon": null, "signoutlat": null, "signoutlon": null, "signtime": null, "signouttime": null, "customer": { "tid": 23, "status": 1, "version": 3, "createUser": null, "createTime": "2018-02-28 09:46:36", "modifyUser": 5, "modifyTime": "2018-03-12 11:51:21", "modifyDescription": "初始创建", "name": "花惠狗", "cellNumber": "13888888888", "cellNumber2": "", "cellNumber3": "", "cellNumber4": "", "cellNumber5": "", "address": "上海市青浦区移动智地1号楼409", "remark": null, "photourl": "/upload/customer/1519782396251.jpg", "ownername": "上海花惠狗信息科技有限公司", "telephone": "18818881888", "weixin": null, "floor": "0", "longitude": 121.174228, "latitude": 31.146823, "vendorId": 5, "area": null, "fax": null, "email": null, "level": null, "customerType": null, "state": null, "scale": null, "industry": null, "employeeId": 584, "employeeName": null, "contactperson": "花总", "contactperson2": "", "contactperson3": "", "contactperson4": "", "contactperson5": "", "businessLicense": "", "authTime": "", "authPerson": "", "customerSource": "", "customerSourceDsc": "", "invoiceHead": "", "customerBank": "", "customerBankAccount": "", "invoicType": "", "saleEmpId": "584", "conserveEmpId": "763,764", "visitEmpId": "586", "saleEmpIdName": null, "conserveEmpIdName": null, "visitEmpIdName": null, "diffPrice": 0, "distance": 500, "isBonsai": 0, "userDefine3": "", "userDefine4": "", "userDefine5": "", "userDefine6": "", "userDefine7": "", "userDefine8": "", "userDefine9": "", "userDefine10": "", "userDefine11": "", "userDefine12": "", "userDefine13": "", "userDefine14": "", "userDefine15": "", "userDefine16": "", "userDefine17": "", "userDefine18": "", "userDefine19": "", "userDefine20": "" }, "employee": { "tid": 584, "status": 1, "version": 0, "createUser": 5, "createTime": "2018-02-28 00:17:25", "modifyUser": 5, "modifyTime": null, "modifyDescription": "初始创建", "userno": "HHG005", "name": "邓轩-销售", "gender": 1, "idnumber": "432822198502020202", "brithday": "", "brithplace": "", "household": null, "houseaddress": "", "qualification": null, "onboarddate": "", "state": 1, "shortphone": "", "cellnumber": "13888888888", "contactaddress": "", "levelname": null, "post": null, "emergencycell": "", "email": "", "deptId": null, "vendorId": 5, "departmentId": 6, "parentDepartmentId": null, "deptName": null } } ], "map": {} }
Mysql like语句值不固定
<select id="getcoachSelByParam" resultType="java.util.HashMap" parameterType="java.util.Map"> SELECT e.`ID`,e.`EmployeeID`,e.`CHNName`,e.`ENGName`,e.`Sex`,e.`Mobile` FROM tb_pcm_coach c,tb_sys_employee e,tb_sys_employeetype tt, tb_sys_department d WHERE c.ID=e.ID AND e.ID=tt.Employee AND e.dept = d.id <!-- AND tt.EmployeeType='EB43871E-1E7C-48CB-B38D-9E3200D011F7}'--> AND e.STATUS='FDCAAF7C-8FE8-4340-993E-9E29000B6F14' <!--AND c.ID IN(SELECT coach FROM tb_mms_coachbuy) --> <if test="employeetype != null and '' != employeetype"> and tt.EmployeeType= #{employeetype} </if> <if test="dept != null and '' != dept"> and INSTR(d.TreeKey, #{dept}) = 1 </if> <if test="coachlevel != null and '' != coachlevel"> and c.CoachLevel= #{coachlevel} </if> <if test="eid != null and '' != eid"> and e.ID != #{eid} </if> <!-- Combobox精确查询 --> <if test="CHNName != null and '' != CHNName"> and e.CHNName like '%#{CHNName}%' </if> </select> 最下面like我想查e.CHNName包括传入的CHNName,也就是like的值不固定,请问应该怎么写? 已解决,我从其他模块借鉴的 <if test="departmentname != null and '' != departmentname"> and INSTR(d.departmentname,#{departmentname}) > 0 </if> mysql中有一个方法 INSTR可以比对两个字符串。
DevExpress中的LookUpEdit控件,选中一项后Text为空
请问,LookUpEdit下拉有显示内容,选中一项后EditText也有值,但是Text为空,显示也是空,这是什么问题?谢谢 /// <summary> /// 绑定跟进人数据Employee /// </summary> private void EmployeeBoundData(DevExpress.XtraEditors.LookUpEdit lookUpEdit) { DevExpress.XtraEditors.LookUpEdit le = lookUpEdit; BLL.Base_Employee bll = new BLL.Base_Employee(); DataSet ds = bll.GetList(" Enabled='1' "); DataTable dt = ds.Tables[0]; if (dt != null) { le.EditValue = "EmployeeId"; le.Properties.ValueMember = "EmployeeId"; le.Properties.DisplayMember = "Employee"; le.Properties.DataSource = dt; //自适应宽度 le.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup; //填充列 le.Properties.PopulateColumns(); //设置列属性 for (int i = 0; i < le.Properties.Columns.Count; i++) { le.Properties.Columns[i].Visible = false; } le.Properties.Columns[1].Visible = true; le.Properties.Columns[1].Caption = "编号"; le.Properties.Columns[2].Visible = true; le.Properties.Columns[2].Caption = "名称"; le.Properties.Columns[2].Width = 100; } }
用ajax请求过来的数据,数据js <tr><td>追加到table里的,结果确很乱,求解?
![图片说明](https://img-ask.csdn.net/upload/201511/01/1446354388_559647.png) ``` <div id="patchmanageTrainee" ><table><tr id="ajaxappend"><th>#springMessage("employeeCode")</th><th>#springMessage("employeeName")</th><th>#springMessage("sub-menu-training-attanding-absentreason")</th> </tr> </table>这是是表头 </div> jQuery.ajax({ type:'post', dataType:'json', url:'ajax_searchabsent.htm', data:'employeeId=' +wid[i]+'&sessionId='+$('#sessionId').val(), success: function(msg){ for(var i=0;i<msg.length;i++){ var employeecode=msg[i].EMPLOYEE_CODE; var reason=msg[i].ABSENT_REASON; var name=msg[i].NAME; var sessionId=msg[i].SESSION_ID; alert(reason); if(reason==undefined){ $("#patchmanageTrainee").find("tr").append('<tr><td>'+employeecode+'</td><td>' +name+'</td><td>'+'<input maxlength=\"100\" class="textItem" placeholder=\"Please enter a reason\" />'+'</td></tr>'); }else{ $("#patchmanageTrainee").find("tr").append('<tr><td>'+employeecode+'</td><td>' +name+'</td><td>'+'<input class="textItem1" value='+reason+' maxlength=\"100\" />'+'</td></tr>'); } } ``` 这是追加上去的数据,但是格式怎么会是那样???怎么回事?
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言 在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话显得很抽象,老规矩,我们先来看个图(这真是一个不和谐的图????): 管道改造经常会用这个小东西,通常我们叫它「三通」,它的主要作用就是将 downstream1 和 downstre...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队 译者 | 凯隐 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
4G EPS 第四代移动通信系统
目录 文章目录目录4G 与 LTE/EPCLTE/EPC 的架构E-UTRANE-UTRAN 协议栈eNodeBEPCMMES-GWP-GWHSSLTE/EPC 协议栈概览 4G 与 LTE/EPC 4G,即第四代移动通信系统,提供了 3G 不能满足的无线网络宽带化,主要提供数据(上网)业务。而 LTE(Long Term Evolution,长期演进技术)是电信领域用于手机及数据终端的高速无线通...
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的Tencent Kona JDK,分布式HTAP数据库 TBase,企业级容器平台TKEStack,以及高性能图计算框架Plato。短短一周之内,腾讯开源了五大重点项目。其中,TubeMQ是腾讯大数据平台部门应用的核心组件,...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问