我正在构建一个数据库,我需要存储货币值.我将货币值存储为美分($ 100.00 = 10000¢).因此,我决定不使用INT存储货币值(有符号的int仅限于存储$21,474,836.48).
我看到MySQL有两个类似的类型:BIGINT和LONG.
在研究并且无法弄清楚差异之后,我做出了一个随意的决定BIGINT.但是当我去编写PreparedStatement时:
int id = ...;
BigInteger amount = ...;
String sql = "insert into transaction(id, amount) VALUES(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, id);
if(amount == null)
pstmt.setNull(2, java.sql.Types.BIGINT);
else
pstmt.setBigInteger(2, amount); // <---- This method does not exist
Run Code Online (Sandbox Code Playgroud)
没有PreparedStatement::setBigInt()方法.唯一PreparedStatement存在的方法是setInt(),setLong()和setBigDecimal.
所以,然后我改变了我的决定并决定LONG改用,但当我去编写相同的代码时,我注意到了这一点:
int id = ...;
BigInteger amount = ...;
String sql = "insert into …Run Code Online (Sandbox Code Playgroud) 我有一个HashMaps矩阵,我试图根据给定的输入添加那些HashMaps的内容,这将匹配"外部"HashMap的键.拿下面的SSCCE(有1个错误说明我的进度),有4个HashMaps的HashMap行,我想在第1行和第3行中添加HashMaps的内容.
当然,我可以用旧的Java 7方式来做这件事.但我想用Java 8流做这个,而不必迭代.
public class HashMapCollector {
public static void main(String[] args) {
HashMap<Integer, HashMap<Integer, BigDecimal>> map = new HashMap<>();
map.put(1, new LinkedHashMap<>()); // row 1
map.put(2, new LinkedHashMap<>()); // row 2
map.put(3, new LinkedHashMap<>()); // row 3
map.put(4, new LinkedHashMap<>()); // row 4
// row 1
map.get(1).merge(1, BigDecimal.TEN, BigDecimal::add);
map.get(1).merge(2, BigDecimal.TEN, BigDecimal::add);
map.get(1).merge(3, BigDecimal.TEN, BigDecimal::add);
map.get(1).merge(4, BigDecimal.TEN, BigDecimal::add);
// row 2
map.get(2).merge(1, BigDecimal.TEN, BigDecimal::add);
map.get(2).merge(2, BigDecimal.TEN, BigDecimal::add);
map.get(2).merge(3, BigDecimal.TEN, BigDecimal::add);
map.get(2).merge(4, BigDecimal.TEN, BigDecimal::add);
// row 3
map.get(3).merge(1, BigDecimal.TEN, …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装JxBrowser(遵循本教程),并在安装JxBrowser驱动程序之后:
我试图编译,并注意到BrowserFactory缺少必要的导入:
并且,通过驱动程序中的类文件进行搜索,确定没有BrowserFactory可用的:
难道我做错了什么?我错过了JxBrowser的必要组件吗?新版本的驱动程序是否不包含BrowserFactory类?
当我第一次开始使用Java PreferencesAPI时,API中的一个明显遗漏是一种putObject()方法.我一直想知道为什么他们不包括它.
所以,我做了一些谷歌搜索,我发现IBM的这篇文章向您展示了如何做到这一点:http://www.ibm.com/developerworks/library/j-prefapi/
他们使用的方法对我来说似乎有些迟钝,因为你必须将其分解Object为byte矩阵,存储它们,然后再重新组装它们.
我的问题是,有没有人尝试过这种方法?你能证明这是存储/检索对象的好方法吗?
我也很好奇为什么Java开发人员离开putObject()了API.有没有人有宝贵的见解?
这个问题是对问题的跟进(BigDecimal - 使用new或valueOf)及其接受的答案.
为方便起见重申问题和答案:
BigDecimal 有两种方法:
double d = 0.1;
BigDecimal bd1 = new BigDecimal(d);
BigDecimal bd2 = BigDecimal.valueOf(d);
Run Code Online (Sandbox Code Playgroud)
哪一个更好?答案显示这些方法不会产生相同的结果:
System.out.println(bd1);
System.out.println(bd2);
Run Code Online (Sandbox Code Playgroud)
显示:
0.1000000000000000055511151231257827021181583404541015625
0.1
Run Code Online (Sandbox Code Playgroud)
在答案中,回答者说:
一般来说,如果结果是相同的(即不是在
BigDecimal大多数情况下,但在大多数情况下),那么valueOf()应该是首选:它可以缓存常见值(如上所示Integer.valueOf()),它甚至可以改变缓存行为呼叫者必须改变.new将始终实例化一个新值,即使没有必要(最好的例子:new Boolean(true)vsBoolean.valueOf(true).).
我的问题是:我们能否得到一些实际的例子,具体来说,我们何时应该使用BigDecimal.valueOf()以及什么时候应该使用new BigDecimal()?回答者说" valueOf()如果结果相同则使用"但这并不能帮助我们知道何时使用它(如果有的话)BigDecimal.
具体来说,哪个更好:
0.1000000000000000055511151231257827021181583404541015625
Run Code Online (Sandbox Code Playgroud)
要么
0.1
Run Code Online (Sandbox Code Playgroud)
?为什么?
根据这个问题/答案,这段代码:
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
p_stmt.setString(1, null);
...
}
Run Code Online (Sandbox Code Playgroud)
相当于:
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
p_stmt.setNull(1, java.sql.Types.VARCHAR);
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这与int/ Integer?? 换句话说,这段代码会做什么:
try(PreparedStatement p_stmt = connection.prepareStatement(sql)) {
Integer i = null;
p_stmt.setInt(1, i);
...
}
Run Code Online (Sandbox Code Playgroud)
setInt()接受一个int不能为null 的原语,但unboxed Integer可以为null.
请考虑以下代码:
public static void main(String[] args) {
String pattern = "MMM dd, yyyy HH:mm:ss a z";
// joda-time
DateTime dt = DateTime.now();
System.out.println(dt.toString(pattern));
// java.time
ZonedDateTime ldt = ZonedDateTime.now();
System.out.println(ldt.toString(pattern)); // doesn't exist
System.out.println(ldt.format(DateTimeFormatter.ofPattern(pattern)));
}
Run Code Online (Sandbox Code Playgroud)
joda-time类(DateTime,LocalDate等)包含一个toString接受所需格式的String的方法.这是一种非常方便的方法.然而,java-8实现省略了这种方法.相反,你需要打电话format(DateTimeFormatter formatter).
一个小抱怨,当然.但我的问题是:是否有任何原因从java.time中省略了这个?将我的应用程序从joda-time转换为java.time将会因为这个小小的遗漏而变得更加困难.但是,如果有合理的原因,我很乐意.并不是说你在这里缓和我的担忧,但我想我会问以防万一.
编辑:对于选民来说,这不是一个基于意见的问题.任何熟悉joda-time/java.time内部工作的人以及他们以某种方式发展的动机都有资格回答这个问题,即使他们从未这样做过.
我正在开发一个应用程序,用于观察谁负责不同的患者,但是我还没有能够解决如何用不同的对象类型填充表.
下面是我的TableView控制器的代码.TableView最终会有四种不同的对象类型,所有这些都将从数据库中检索出来.
我希望我的表能够保存Patient对象,User对象(负责人)和RelationManager对象.
以下是我的代码,如果您需要更多代码,请告诉我:-).
package fird.presentation;
import fird.Patient;
import fird.RelationManager;
import fird.User;
import fird.data.DAOFactory;
import fird.data.DataDAO;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
/**
* FXML Controller class
*
* @author SimonKragh
*/
public class KMAMainFrameOverviewController implements Initializable {
@FXML
private TextField txtCPRKMAMainFrame;
@FXML
private TableColumn<Patient, String> TableColumnCPR;
@FXML
private TableColumn<Patient, String> TableColumnFirstname;
@FXML
private TableColumn<Patient, String> TableColumnSurname;
@FXML
private TableColumn<User, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 java 脚本根据确认条件提交一个弹簧表单。以下是我的控制器
@RequestMapping("/loadPage.do")
public ModelAndView loadPage()
{
ModelAndView modelAndView;
//some code
return modelAndView;
}
@RequestMapping(value="/submitAction.do" , method=RequestMethod.POST)
public String submitForm(@ModelAttribute Object form, Model m ){
//some code
return "page";
}
Run Code Online (Sandbox Code Playgroud)
JSP
<script>
function confirmForChanges (){
var r= confirm("Do you want to proceed");
if (r == true) {
document.getElementById('submitButton').action = "/root/submitAction.do";
document.getElementById('submitButton').submit();
alert("Your changes have been saved");
}if (r ==false){
alert("changes not saved")
}
}
</script>
<form:form action="/submitAction.do" commandName="command" method="post">
<input id=cancelButton type="button" value="Cancel" />
<input id=submitButton type="submit" value="Submit" onclick="javascript:confirmForChanges();"/>; …Run Code Online (Sandbox Code Playgroud) 我问了这个问题(How do I call java.sql.Connection::abort?),它让我想到了另一个问题。
和
java.sql.Connection conn = ... ;
Run Code Online (Sandbox Code Playgroud)
有什么区别
conn.close();
Run Code Online (Sandbox Code Playgroud)
和
conn.abort(...);
Run Code Online (Sandbox Code Playgroud)
?
我的问题类似于这个问题(如何在JScrollPane中获取JScrollPanes以跟随父级调整大小),但这个问题不明确,那里的答案对我没有帮助..
我有这个SSCCE(使用MigLayout):
public static final int pref_height = 500;
public static void main(String[] args) {
JPanel innerPanel = new JPanel(new MigLayout());
innerPanel.setBorder(new LineBorder(Color.YELLOW, 5));
for(int i = 0; i < 15; i++) {
JTextArea textArea = new JTextArea();
textArea.setColumns(20);
textArea.setRows(5);
textArea.setWrapStyleWord(true);
textArea.setLineWrap(true);
JScrollPane jsp = new JScrollPane(textArea);
innerPanel.add(new JLabel("Notes" + i));
innerPanel.add(jsp, "span, grow");
}
JScrollPane jsp = new JScrollPane(innerPanel) {
@Override
public Dimension getPreferredSize() {
setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
Dimension dim = new Dimension(super.getPreferredSize().width + getVerticalScrollBar().getSize().width, pref_height);
setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); …Run Code Online (Sandbox Code Playgroud) 添加到Java 8中HashMap中包含的BigDecimal的最简单方法是什么?
我有这两个JSON地图:
{
"1000006": "Alternate Business Phone",
"1000008": "Alternate Home Phone",
"1000001": "Business Phone",
"1000003": "Clinic Phone",
"3": "Facsimile",
"1000007": "Home Phone",
"1000004": "Lab Phone",
"4": "Pager",
"1000002": "Secure Msg Phone"
}
Run Code Online (Sandbox Code Playgroud)
和
{
"6": "Business Email",
"1000005": "Deliver To Email",
"7": "Personal Email"
}
Run Code Online (Sandbox Code Playgroud)
哪些是按值按字母顺序排列的键值映射.我正在使用这两个来根据另一个下拉列表的选定项目更改下拉菜单的内容.图片来说明:
电话选择:
电邮选择:
但是,正如您在图像中看到的那样,列表项的顺序不会被保留.
处理列表项的我的Javascript是这样的:
var options_1 = {"1000006":"Alternate Business Phone","1000008":"Alternate Home Phone","1000001":"Business Phone","1000003":"Clinic Phone","3":"Facsimile","1000007":"Home Phone","1000004":"Lab Phone","4":"Pager","1000002":"Secure Msg Phone"};
var options_2 = {"6":"Business Email","1000005":"Deliver To Email","7":"Personal Email"};
function changePhoneEmailItems()
{
var selectedItem = document.getElementById("addNewCategory").value; …Run Code Online (Sandbox Code Playgroud) java ×11
bigdecimal ×3
java-8 ×3
autoboxing ×1
bigint ×1
forms ×1
java-stream ×1
java-time ×1
javafx ×1
javascript ×1
jdbc ×1
jodatime ×1
jpanel ×1
jscrollpane ×1
json ×1
jxbrowser ×1
long-integer ×1
miglayout ×1
mysql ×1
object ×1
preferences ×1
spring ×1
spring-mvc ×1
swing ×1
tableview ×1